€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ0/translations/zh_CN/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/admin-guide/pm/suspend-flows”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/admin-guide/pm/suspend-flows.rst”h´Kubh¶)�”}”(hŒ4This data file has been placed in the public domain.”h]”hŒ4This data file has been placed in the public domain.”…”�”}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³Œo/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt”h´Kubh¶)�”}”(hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”h]”hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”…”�”}”hh×sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÖh´KubhŒsubstitution_definition”“”)�”}”(hŒ*.. |amp| unicode:: U+00026 .. AMPERSAND”h]”hŒ&”…”�”}”hhçsbah}”(h]”h ]”h"]”Œamp”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ+.. |apos| unicode:: U+00027 .. APOSTROPHE”h]”hŒ'”…”�”}”hhösbah}”(h]”h ]”h"]”Œapos”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ).. |ast| unicode:: U+0002A .. ASTERISK”h]”hŒ*”…”�”}”hjsbah}”(h]”h ]”h"]”Œast”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ+.. |brvbar| unicode:: U+000A6 .. BROKEN BAR”h]”hŒ¦”…”�”}”hjsbah}”(h]”h ]”h"]”Œbrvbar”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUS”h]”hŒ\”…”�”}”hj#sbah}”(h]”h ]”h"]”Œbsol”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ*.. |cent| unicode:: U+000A2 .. CENT SIGN”h]”hŒ¢”…”�”}”hj2sbah}”(h]”h ]”h"]”Œcent”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |colon| unicode:: U+0003A .. COLON”h]”hŒ:”…”�”}”hjAsbah}”(h]”h ]”h"]”Œcolon”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |comma| unicode:: U+0002C .. COMMA”h]”hŒ,”…”�”}”hjPsbah}”(h]”h ]”h"]”Œcomma”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |commat| unicode:: U+00040 .. COMMERCIAL AT”h]”hŒ@”…”�”}”hj_sbah}”(h]”h ]”h"]”Œcommat”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN”h]”hŒ©”…”�”}”hjnsbah}”(h]”h ]”h"]”Œcopy”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |curren| unicode:: U+000A4 .. CURRENCY SIGN”h]”hŒ¤”…”�”}”hj}sbah}”(h]”h ]”h"]”Œcurren”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROW”h]”hŒ↓”…”�”}”hjŒsbah}”(h]”h ]”h"]”Œdarr”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |deg| unicode:: U+000B0 .. DEGREE SIGN”h]”hŒ°”…”�”}”hj›sbah}”(h]”h ]”h"]”Œdeg”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |divide| unicode:: U+000F7 .. DIVISION SIGN”h]”hŒ÷”…”�”}”hjªsbah}”(h]”h ]”h"]”Œdivide”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |dollar| unicode:: U+00024 .. DOLLAR SIGN”h]”hŒ$”…”�”}”hj¹sbah}”(h]”h ]”h"]”Œdollar”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |equals| unicode:: U+0003D .. EQUALS SIGN”h]”hŒ=”…”�”}”hjÈsbah}”(h]”h ]”h"]”Œequals”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |excl| unicode:: U+00021 .. EXCLAMATION MARK”h]”hŒ!”…”�”}”hj×sbah}”(h]”h ]”h"]”Œexcl”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hjæsbah}”(h]”h ]”h"]”Œfrac12”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTER”h]”hŒ¼”…”�”}”hjõsbah}”(h]”h ]”h"]”Œfrac14”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTH”h]”hŒâ…›”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac18”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERS”h]”hŒ¾”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac34”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHS”h]”hŒâ…œ”…”�”}”hj"sbah}”(h]”h ]”h"]”Œfrac38”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHS”h]”hŒâ…�”…”�”}”hj1sbah}”(h]”h ]”h"]”Œfrac58”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHS”h]”hŒâ…ž”…”�”}”hj@sbah}”(h]”h ]”h"]”Œfrac78”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGN”h]”hŒ>”…”�”}”hjOsbah}”(h]”h ]”h"]”Œgt”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hj^sbah}”(h]”h ]”h"]”Œhalf”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ/.. |horbar| unicode:: U+02015 .. HORIZONTAL BAR”h]”hŒ―”…”�”}”hjmsbah}”(h]”h ]”h"]”Œhorbar”ah$]”h&]”uh1håh³hÖh´K!hhh²hubhæ)�”}”(hŒ'.. |hyphen| unicode:: U+02010 .. HYPHEN”h]”hŒâ€�”…”�”}”hj|sbah}”(h]”h ]”h"]”Œhyphen”ah$]”h&]”uh1håh³hÖh´K"hhh²hubhæ)�”}”(hŒ:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARK”h]”hŒ¡”…”�”}”hj‹sbah}”(h]”h ]”h"]”Œiexcl”ah$]”h&]”uh1håh³hÖh´K#hhh²hubhæ)�”}”(hŒ7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARK”h]”hŒ¿”…”�”}”hjšsbah}”(h]”h ]”h"]”Œiquest”ah$]”h&]”uh1håh³hÖh´K$hhh²hubhæ)�”}”(hŒJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARK”h]”hŒ«”…”�”}”hj©sbah}”(h]”h ]”h"]”Œlaquo”ah$]”h&]”uh1håh³hÖh´K%hhh²hubhæ)�”}”(hŒ0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROW”h]”hŒâ†�”…”�”}”hj¸sbah}”(h]”h ]”h"]”Œlarr”ah$]”h&]”uh1håh³hÖh´K&hhh²hubhæ)�”}”(hŒ3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKET”h]”hŒ{”…”�”}”hjÇsbah}”(h]”h ]”h"]”Œlcub”ah$]”h&]”uh1håh³hÖh´K'hhh²hubhæ)�”}”(hŒ;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARK”h]”hŒ“”…”�”}”hjÖsbah}”(h]”h ]”h"]”Œldquo”ah$]”h&]”uh1håh³hÖh´K(hhh²hubhæ)�”}”(hŒ).. |lowbar| unicode:: U+0005F .. LOW LINE”h]”hŒ_”…”�”}”hjåsbah}”(h]”h ]”h"]”Œlowbar”ah$]”h&]”uh1håh³hÖh´K)hhh²hubhæ)�”}”(hŒ1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESIS”h]”hŒ(”…”�”}”hjôsbah}”(h]”h ]”h"]”Œlpar”ah$]”h&]”uh1håh³hÖh´K*hhh²hubhæ)�”}”(hŒ4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKET”h]”hŒ[”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsqb”ah$]”h&]”uh1håh³hÖh´K+hhh²hubhæ)�”}”(hŒ;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARK”h]”hŒ‘”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsquo”ah$]”h&]”uh1håh³hÖh´K,hhh²hubhæ)�”}”(hŒ/.. |lt| unicode:: U+0003C .. LESS-THAN SIGN”h]”hŒ<”…”�”}”hj!sbah}”(h]”h ]”h"]”Œlt”ah$]”h&]”uh1håh³hÖh´K-hhh²hubhæ)�”}”(hŒ+.. |micro| unicode:: U+000B5 .. MICRO SIGN”h]”hŒµ”…”�”}”hj0sbah}”(h]”h ]”h"]”Œmicro”ah$]”h&]”uh1håh³hÖh´K.hhh²hubhæ)�”}”(hŒ+.. |middot| unicode:: U+000B7 .. MIDDLE DOT”h]”hŒ·”…”�”}”hj?sbah}”(h]”h ]”h"]”Œmiddot”ah$]”h&]”uh1håh³hÖh´K/hhh²hubhæ)�”}”(hŒ/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACE”h]”hŒ ”…”�”}”hjNsbah}”(h]”h ]”h"]”Œnbsp”ah$]”h&]”uh1håh³hÖh´K0hhh²hubhæ)�”}”(hŒ).. |not| unicode:: U+000AC .. NOT SIGN”h]”hŒ¬”…”�”}”hj]sbah}”(h]”h ]”h"]”Œnot”ah$]”h&]”uh1håh³hÖh´K1hhh²hubhæ)�”}”(hŒ,.. |num| unicode:: U+00023 .. NUMBER SIGN”h]”hŒ#”…”�”}”hjlsbah}”(h]”h ]”h"]”Œnum”ah$]”h&]”uh1håh³hÖh´K2hhh²hubhæ)�”}”(hŒ).. |ohm| unicode:: U+02126 .. OHM SIGN”h]”hŒΩ”…”�”}”hj{sbah}”(h]”h ]”h"]”Œohm”ah$]”h&]”uh1håh³hÖh´K3hhh²hubhæ)�”}”(hŒ;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATOR”h]”hŒª”…”�”}”hjŠsbah}”(h]”h ]”h"]”Œordf”ah$]”h&]”uh1håh³hÖh´K4hhh²hubhæ)�”}”(hŒ<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATOR”h]”hŒº”…”�”}”hj™sbah}”(h]”h ]”h"]”Œordm”ah$]”h&]”uh1håh³hÖh´K5hhh²hubhæ)�”}”(hŒ-.. |para| unicode:: U+000B6 .. PILCROW SIGN”h]”hŒ¶”…”�”}”hj¨sbah}”(h]”h ]”h"]”Œpara”ah$]”h&]”uh1håh³hÖh´K6hhh²hubhæ)�”}”(hŒ-.. |percnt| unicode:: U+00025 .. PERCENT SIGN”h]”hŒ%”…”�”}”hj·sbah}”(h]”h ]”h"]”Œpercnt”ah$]”h&]”uh1håh³hÖh´K7hhh²hubhæ)�”}”(hŒ*.. |period| unicode:: U+0002E .. FULL STOP”h]”hŒ.”…”�”}”hjÆsbah}”(h]”h ]”h"]”Œperiod”ah$]”h&]”uh1håh³hÖh´K8hhh²hubhæ)�”}”(hŒ*.. |plus| unicode:: U+0002B .. PLUS SIGN”h]”hŒ+”…”�”}”hjÕsbah}”(h]”h ]”h"]”Œplus”ah$]”h&]”uh1håh³hÖh´K9hhh²hubhæ)�”}”(hŒ0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGN”h]”hŒ±”…”�”}”hjäsbah}”(h]”h ]”h"]”Œplusmn”ah$]”h&]”uh1håh³hÖh´K:hhh²hubhæ)�”}”(hŒ+.. |pound| unicode:: U+000A3 .. POUND SIGN”h]”hŒ£”…”�”}”hjósbah}”(h]”h ]”h"]”Œpound”ah$]”h&]”uh1håh³hÖh´K;hhh²hubhæ)�”}”(hŒ... |quest| unicode:: U+0003F .. QUESTION MARK”h]”hŒ?”…”�”}”hjsbah}”(h]”h ]”h"]”Œquest”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROW”h]”hŒ→”…”�”}”hj/sbah}”(h]”h ]”h"]”Œrarr”ah$]”h&]”uh1håh³hÖh´K?hhh²hubhæ)�”}”(hŒ4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKET”h]”hŒ}”…”�”}”hj>sbah}”(h]”h ]”h"]”Œrcub”ah$]”h&]”uh1håh³hÖh´K@hhh²hubhæ)�”}”(hŒ<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARK”h]”hŒâ€�”…”�”}”hjMsbah}”(h]”h ]”h"]”Œrdquo”ah$]”h&]”uh1håh³hÖh´KAhhh²hubhæ)�”}”(hŒ0.. |reg| unicode:: U+000AE .. REGISTERED SIGN”h]”hŒ®”…”�”}”hj\sbah}”(h]”h ]”h"]”Œreg”ah$]”h&]”uh1håh³hÖh´KBhhh²hubhæ)�”}”(hŒ2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESIS”h]”hŒ)”…”�”}”hjksbah}”(h]”h ]”h"]”Œrpar”ah$]”h&]”uh1håh³hÖh´KChhh²hubhæ)�”}”(hŒ5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKET”h]”hŒ]”…”�”}”hjzsbah}”(h]”h ]”h"]”Œrsqb”ah$]”h&]”uh1håh³hÖh´KDhhh²hubhæ)�”}”(hŒ<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARK”h]”hŒ’”…”�”}”hj‰sbah}”(h]”h ]”h"]”Œrsquo”ah$]”h&]”uh1håh³hÖh´KEhhh²hubhæ)�”}”(hŒ-.. |sect| unicode:: U+000A7 .. SECTION SIGN”h]”hŒ§”…”�”}”hj˜sbah}”(h]”h ]”h"]”Œsect”ah$]”h&]”uh1håh³hÖh´KFhhh²hubhæ)�”}”(hŒ*.. |semi| unicode:: U+0003B .. SEMICOLON”h]”hŒ;”…”�”}”hj§sbah}”(h]”h ]”h"]”Œsemi”ah$]”h&]”uh1håh³hÖh´KGhhh²hubhæ)�”}”(hŒ,.. |shy| unicode:: U+000AD .. SOFT HYPHEN”h]”hŒ­”…”�”}”hj¶sbah}”(h]”h ]”h"]”Œshy”ah$]”h&]”uh1håh³hÖh´KHhhh²hubhæ)�”}”(hŒ(.. |sol| unicode:: U+0002F .. SOLIDUS”h]”hŒ/”…”�”}”hjÅsbah}”(h]”h ]”h"]”Œsol”ah$]”h&]”uh1håh³hÖh´KIhhh²hubhæ)�”}”(hŒ,.. |sung| unicode:: U+0266A .. EIGHTH NOTE”h]”hŒ♪”…”�”}”hjÔsbah}”(h]”h ]”h"]”Œsung”ah$]”h&]”uh1håh³hÖh´KJhhh²hubhæ)�”}”(hŒ0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONE”h]”hŒ¹”…”�”}”hjãsbah}”(h]”h ]”h"]”Œsup1”ah$]”h&]”uh1håh³hÖh´KKhhh²hubhæ)�”}”(hŒ0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWO”h]”hŒ²”…”�”}”hjòsbah}”(h]”h ]”h"]”Œsup2”ah$]”h&]”uh1håh³hÖh´KLhhh²hubhæ)�”}”(hŒ2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREE”h]”hŒ³”…”�”}”hjsbah}”(h]”h ]”h"]”Œsup3”ah$]”h&]”uh1håh³hÖh´KMhhh²hubhæ)�”}”(hŒ4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGN”h]”hŒ×”…”�”}”hjsbah}”(h]”h ]”h"]”Œtimes”ah$]”h&]”uh1håh³hÖh´KNhhh²hubhæ)�”}”(hŒ0.. |trade| unicode:: U+02122 .. TRADE MARK SIGN”h]”hŒâ„¢”…”�”}”hjsbah}”(h]”h ]”h"]”Œtrade”ah$]”h&]”uh1håh³hÖh´KOhhh²hubhæ)�”}”(hŒ... |uarr| unicode:: U+02191 .. UPWARDS ARROW”h]”hŒ↑”…”�”}”hj.sbah}”(h]”h ]”h"]”Œuarr”ah$]”h&]”uh1håh³hÖh´KPhhh²hubhæ)�”}”(hŒ... |verbar| unicode:: U+0007C .. VERTICAL LINE”h]”hŒ|”…”�”}”hj=sbah}”(h]”h ]”h"]”Œverbar”ah$]”h&]”uh1håh³hÖh´KQhhh²hubhæ)�”}”(hŒ*.. |yen| unicode:: U+000A5 .. YEN SIGN ”h]”hŒÂ¥”…”�”}”hjLsbah}”(h]”h ]”h"]”Œyen”ah$]”h&]”uh1håh³hÖh´KRhhh²hubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒSystem Suspend Code Flows”h]”hŒSystem Suspend Code Flows”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj]h²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”(hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒ Copyright”h]”hŒ Copyright”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjwh³hÇh´KubhŒ field_body”“”)�”}”(hŒ|copy| 2020 Intel Corporation ”h]”hŒ paragraph”“”)�”}”(hŒ|copy| 2020 Intel Corporation”h]”(hŒ©”…”�”}”(hj’h²hh³Nh´NubhŒ 2020 Intel Corporation”…”�”}”(hj’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³hÇh´Khjrh²hubjv)�”}”(hhh]”(j{)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj°h³hÇh´Kubj‹)�”}”(hŒ/Rafael J. Wysocki ”h]”j‘)�”}”(hŒ.Rafael J. Wysocki ”h]”(hŒRafael J. Wysocki <”…”�”}”(hjÅh²hh³Nh´NubhŒ reference”“”)�”}”(hŒrafael.j.wysocki@intel.com”h]”hŒrafael.j.wysocki@intel.com”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ!mailto:rafael.j.wysocki@intel.com”uh1jÍhjÅubhŒ>”…”�”}”(hjÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³hÇh´K hjrh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj]h²hh³hÇh´Kubj‘)�”}”(hXuAt least one global system-wide transition needs to be carried out for the system to get from the working state into one of the supported :doc:`sleep states `. Hibernation requires more than one transition to occur for this purpose, but the other sleep states, commonly referred to as *system-wide suspend* (or simply *system suspend*) states, need only one.”h]”(hŒŠAt least one global system-wide transition needs to be carried out for the system to get from the working state into one of the supported ”…”�”}”(hjûh²hh³Nh´Nubh)�”}”(hŒ":doc:`sleep states `”h]”hŒinline”“”)�”}”(hjh]”hŒ sleep states”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œadmin-guide/pm/suspend-flows”Œ refdomain”jŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ sleep-states”uh1hh³hÇh´K hjûubhŒ€. Hibernation requires more than one transition to occur for this purpose, but the other sleep states, commonly referred to as ”…”�”}”(hjûh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*system-wide suspend*”h]”hŒsystem-wide suspend”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjûubhŒ (or simply ”…”�”}”(hjûh²hh³Nh´Nubj-)�”}”(hŒ*system suspend*”h]”hŒsystem suspend”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjûubhŒ) states, need only one.”…”�”}”(hjûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K hj]h²hubj‘)�”}”(hXqFor those sleep states, the transition from the working state of the system into the target sleep state is referred to as *system suspend* too (in the majority of cases, whether this means a transition or a sleep state of the system should be clear from the context) and the transition back from the sleep state into the working state is referred to as *system resume*.”h]”(hŒzFor those sleep states, the transition from the working state of the system into the target sleep state is referred to as ”…”�”}”(hjXh²hh³Nh´Nubj-)�”}”(hŒ*system suspend*”h]”hŒsystem suspend”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjXubhŒ× too (in the majority of cases, whether this means a transition or a sleep state of the system should be clear from the context) and the transition back from the sleep state into the working state is referred to as ”…”�”}”(hjXh²hh³Nh´Nubj-)�”}”(hŒ*system resume*”h]”hŒ system resume”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjXubhŒ.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khj]h²hubj‘)�”}”(hXQThe kernel code flows associated with the suspend and resume transitions for different sleep states of the system are quite similar, but there are some significant differences between the :ref:`suspend-to-idle ` code flows and the code flows related to the :ref:`suspend-to-RAM ` and :ref:`standby ` sleep states.”h]”(hŒ¼The kernel code flows associated with the suspend and resume transitions for different sleep states of the system are quite similar, but there are some significant differences between the ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:ref:`suspend-to-idle `”h]”j)�”}”(hj”h]”hŒsuspend-to-idle”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”j Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œs2idle”uh1hh³hÇh´KhjŠubhŒ. code flows and the code flows related to the ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:ref:`suspend-to-RAM `”h]”j)�”}”(hj¸h]”hŒsuspend-to-RAM”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jÄŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œs2ram”uh1hh³hÇh´KhjŠubhŒ and ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:ref:`standby `”h]”j)�”}”(hjÜh]”hŒstandby”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhjÚubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jèŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œstandby”uh1hh³hÇh´KhjŠubhŒ sleep states.”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khj]h²hubj‘)�”}”(hXýThe :ref:`suspend-to-RAM ` and :ref:`standby ` sleep states cannot be implemented without platform support and the difference between them boils down to the platform-specific actions carried out by the suspend and resume hooks that need to be provided by the platform driver to make them available. Apart from that, the suspend and resume code flows for these sleep states are mostly identical, so they both together will be referred to as *platform-dependent suspend* states in what follows.”h]”(hŒThe ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:ref:`suspend-to-RAM `”h]”j)�”}”(hjh]”hŒsuspend-to-RAM”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œs2ram”uh1hh³hÇh´KhjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:ref:`standby `”h]”j)�”}”(hj2h]”hŒstandby”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj0ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”j>Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œstandby”uh1hh³hÇh´KhjubhX‹ sleep states cannot be implemented without platform support and the difference between them boils down to the platform-specific actions carried out by the suspend and resume hooks that need to be provided by the platform driver to make them available. Apart from that, the suspend and resume code flows for these sleep states are mostly identical, so they both together will be referred to as ”…”�”}”(hjh²hh³Nh´Nubj-)�”}”(hŒ*platform-dependent suspend*”h]”hŒplatform-dependent suspend”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjubhŒ states in what follows.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khj]h²hubhŒtarget”“”)�”}”(hŒ.. _s2idle_suspend:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œs2idle-suspend”uh1jlh´K~hj]h²hh³hÇŒ referenced”Kubj\)�”}”(hhh]”(ja)�”}”(hŒ!Suspend-to-idle Suspend Code Flow”h]”hŒ!Suspend-to-idle Suspend Code Flow”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj{h²hh³hÇh´K+ubj‘)�”}”(hŒŠThe following steps are taken in order to transition the system from the working state to the :ref:`suspend-to-idle ` sleep state:”h]”(hŒ^The following steps are taken in order to transition the system from the working state to the ”…”�”}”(hjŒh²hh³Nh´Nubh)�”}”(hŒ:ref:`suspend-to-idle `”h]”j)�”}”(hj–h]”hŒsuspend-to-idle”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”j¢Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œs2idle”uh1hh³hÇh´K-hjŒubhŒ sleep state:”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K-hj{h²hubhŒ block_quote”“”)�”}”(hX” 1. Invoking system-wide suspend notifiers. Kernel subsystems can register callbacks to be invoked when the suspend transition is about to occur and when the resume transition has finished. That allows them to prepare for the change of the system state and to clean up after getting back to the working state. 2. Freezing tasks. Tasks are frozen primarily in order to avoid unchecked hardware accesses from user space through MMIO regions or I/O registers exposed directly to it and to prevent user space from entering the kernel while the next step of the transition is in progress (which might have been problematic for various reasons). All user space tasks are intercepted as though they were sent a signal and put into uninterruptible sleep until the end of the subsequent system resume transition. The kernel threads that choose to be frozen during system suspend for specific reasons are frozen subsequently, but they are not intercepted. Instead, they are expected to periodically check whether or not they need to be frozen and to put themselves into uninterruptible sleep if so. [Note, however, that kernel threads can use locking and other concurrency controls available in kernel space to synchronize themselves with system suspend and resume, which can be much more precise than the freezing, so the latter is not a recommended option for kernel threads.] 3. Suspending devices and reconfiguring IRQs. Devices are suspended in four phases called *prepare*, *suspend*, *late suspend* and *noirq suspend* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase). Every device is visited in each phase, but typically it is not physically accessed in more than two of them. The runtime PM API is disabled for every device during the *late* suspend phase and high-level ("action") interrupt handlers are prevented from being invoked before the *noirq* suspend phase. Interrupts are still handled after that, but they are only acknowledged to interrupt controllers without performing any device-specific actions that would be triggered in the working state of the system (those actions are deferred till the subsequent system resume transition as described `below `_). IRQs associated with system wakeup devices are "armed" so that the resume transition of the system is started when one of them signals an event. 4. Freezing the scheduler tick and suspending timekeeping. When all devices have been suspended, CPUs enter the idle loop and are put into the deepest available idle state. While doing that, each of them "freezes" its own scheduler tick so that the timer events associated with the tick do not occur until the CPU is woken up by another interrupt source. The last CPU to enter the idle state also stops the timekeeping which (among other things) prevents high resolution timers from triggering going forward until the first CPU that is woken up restarts the timekeeping. That allows the CPUs to stay in the deep idle state relatively long in one go. From this point on, the CPUs can only be woken up by non-timer hardware interrupts. If that happens, they go back to the idle state unless the interrupt that woke up one of them comes from an IRQ that has been armed for system wakeup, in which case the system resume transition is started. ”h]”hŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hX4Invoking system-wide suspend notifiers. Kernel subsystems can register callbacks to be invoked when the suspend transition is about to occur and when the resume transition has finished. That allows them to prepare for the change of the system state and to clean up after getting back to the working state. ”h]”(j‘)�”}”(hŒ'Invoking system-wide suspend notifiers.”h]”hŒ'Invoking system-wide suspend notifiers.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K0hjËubj‘)�”}”(hŒ‘Kernel subsystems can register callbacks to be invoked when the suspend transition is about to occur and when the resume transition has finished.”h]”hŒ‘Kernel subsystems can register callbacks to be invoked when the suspend transition is about to occur and when the resume transition has finished.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K2hjËubj‘)�”}”(hŒwThat allows them to prepare for the change of the system state and to clean up after getting back to the working state.”h]”hŒwThat allows them to prepare for the change of the system state and to clean up after getting back to the working state.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K5hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubjÊ)�”}”(hX$Freezing tasks. Tasks are frozen primarily in order to avoid unchecked hardware accesses from user space through MMIO regions or I/O registers exposed directly to it and to prevent user space from entering the kernel while the next step of the transition is in progress (which might have been problematic for various reasons). All user space tasks are intercepted as though they were sent a signal and put into uninterruptible sleep until the end of the subsequent system resume transition. The kernel threads that choose to be frozen during system suspend for specific reasons are frozen subsequently, but they are not intercepted. Instead, they are expected to periodically check whether or not they need to be frozen and to put themselves into uninterruptible sleep if so. [Note, however, that kernel threads can use locking and other concurrency controls available in kernel space to synchronize themselves with system suspend and resume, which can be much more precise than the freezing, so the latter is not a recommended option for kernel threads.] ”h]”(j‘)�”}”(hŒFreezing tasks.”h]”hŒFreezing tasks.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K8hjÿubj‘)�”}”(hX6Tasks are frozen primarily in order to avoid unchecked hardware accesses from user space through MMIO regions or I/O registers exposed directly to it and to prevent user space from entering the kernel while the next step of the transition is in progress (which might have been problematic for various reasons).”h]”hX6Tasks are frozen primarily in order to avoid unchecked hardware accesses from user space through MMIO regions or I/O registers exposed directly to it and to prevent user space from entering the kernel while the next step of the transition is in progress (which might have been problematic for various reasons).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K:hjÿubj‘)�”}”(hŒ£All user space tasks are intercepted as though they were sent a signal and put into uninterruptible sleep until the end of the subsequent system resume transition.”h]”hŒ£All user space tasks are intercepted as though they were sent a signal and put into uninterruptible sleep until the end of the subsequent system resume transition.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K@hjÿubj‘)�”}”(hX5The kernel threads that choose to be frozen during system suspend for specific reasons are frozen subsequently, but they are not intercepted. Instead, they are expected to periodically check whether or not they need to be frozen and to put themselves into uninterruptible sleep if so. [Note, however, that kernel threads can use locking and other concurrency controls available in kernel space to synchronize themselves with system suspend and resume, which can be much more precise than the freezing, so the latter is not a recommended option for kernel threads.]”h]”hX5The kernel threads that choose to be frozen during system suspend for specific reasons are frozen subsequently, but they are not intercepted. Instead, they are expected to periodically check whether or not they need to be frozen and to put themselves into uninterruptible sleep if so. [Note, however, that kernel threads can use locking and other concurrency controls available in kernel space to synchronize themselves with system suspend and resume, which can be much more precise than the freezing, so the latter is not a recommended option for kernel threads.]”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KDhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubjÊ)�”}”(hXîSuspending devices and reconfiguring IRQs. Devices are suspended in four phases called *prepare*, *suspend*, *late suspend* and *noirq suspend* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase). Every device is visited in each phase, but typically it is not physically accessed in more than two of them. The runtime PM API is disabled for every device during the *late* suspend phase and high-level ("action") interrupt handlers are prevented from being invoked before the *noirq* suspend phase. Interrupts are still handled after that, but they are only acknowledged to interrupt controllers without performing any device-specific actions that would be triggered in the working state of the system (those actions are deferred till the subsequent system resume transition as described `below `_). IRQs associated with system wakeup devices are "armed" so that the resume transition of the system is started when one of them signals an event. ”h]”(j‘)�”}”(hŒ*Suspending devices and reconfiguring IRQs.”h]”hŒ*Suspending devices and reconfiguring IRQs.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KMhjAubj‘)�”}”(hŒÂDevices are suspended in four phases called *prepare*, *suspend*, *late suspend* and *noirq suspend* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase).”h]”(hŒ,Devices are suspended in four phases called ”…”�”}”(hjSh²hh³Nh´Nubj-)�”}”(hŒ *prepare*”h]”hŒprepare”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjSubhŒ, ”…”�”}”(hjSh²hh³Nh´Nubj-)�”}”(hŒ *suspend*”h]”hŒsuspend”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjSubhŒ, ”…”�”}”(hjSh²hh³Nh´Nubj-)�”}”(hŒ*late suspend*”h]”hŒ late suspend”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjSubhŒ and ”…”�”}”(hjSh²hh³Nh´Nubj-)�”}”(hŒ*noirq suspend*”h]”hŒ noirq suspend”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjSubhŒ (see ”…”�”}”(hjSh²hh³Nh´Nubh)�”}”(hŒ:ref:`driverapi_pm_devices`”h]”j)�”}”(hj¥h]”hŒdriverapi_pm_devices”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”j±Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj&Œdriverapi_pm_devices”uh1hh³hÇh´KOhjSubhŒ= for more information on what exactly happens in each phase).”…”�”}”(hjSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KOhjAubj‘)�”}”(hŒlEvery device is visited in each phase, but typically it is not physically accessed in more than two of them.”h]”hŒlEvery device is visited in each phase, but typically it is not physically accessed in more than two of them.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KShjAubj‘)�”}”(hŒ¿The runtime PM API is disabled for every device during the *late* suspend phase and high-level ("action") interrupt handlers are prevented from being invoked before the *noirq* suspend phase.”h]”(hŒ;The runtime PM API is disabled for every device during the ”…”�”}”(hjÛh²hh³Nh´Nubj-)�”}”(hŒ*late*”h]”hŒlate”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjÛubhŒl suspend phase and high-level (“actionâ€�) interrupt handlers are prevented from being invoked before the ”…”�”}”(hjÛh²hh³Nh´Nubj-)�”}”(hŒ*noirq*”h]”hŒnoirq”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjÛubhŒ suspend phase.”…”�”}”(hjÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KVhjAubj‘)�”}”(hX<Interrupts are still handled after that, but they are only acknowledged to interrupt controllers without performing any device-specific actions that would be triggered in the working state of the system (those actions are deferred till the subsequent system resume transition as described `below `_).”h]”(hX!Interrupts are still handled after that, but they are only acknowledged to interrupt controllers without performing any device-specific actions that would be triggered in the working state of the system (those actions are deferred till the subsequent system resume transition as described ”…”�”}”(hj h²hh³Nh´NubjÎ)�”}”(hŒ`below `_”h]”hŒbelow”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œbelow”jxŒ s2idle-resume”uh1jÍhj Œresolved”Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œbelow”ah$]”h&]”jxj% uh1jlŒindirect_reference_name”Œ s2idle_resume”hj j& KubhŒ).”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KZhjAubj‘)�”}”(hŒ�IRQs associated with system wakeup devices are "armed" so that the resume transition of the system is started when one of them signals an event.”h]”hŒ”IRQs associated with system wakeup devices are “armedâ€� so that the resume transition of the system is started when one of them signals an event.”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K`hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubjÊ)�”}”(hX¯Freezing the scheduler tick and suspending timekeeping. When all devices have been suspended, CPUs enter the idle loop and are put into the deepest available idle state. While doing that, each of them "freezes" its own scheduler tick so that the timer events associated with the tick do not occur until the CPU is woken up by another interrupt source. The last CPU to enter the idle state also stops the timekeeping which (among other things) prevents high resolution timers from triggering going forward until the first CPU that is woken up restarts the timekeeping. That allows the CPUs to stay in the deep idle state relatively long in one go. From this point on, the CPUs can only be woken up by non-timer hardware interrupts. If that happens, they go back to the idle state unless the interrupt that woke up one of them comes from an IRQ that has been armed for system wakeup, in which case the system resume transition is started. ”h]”(j‘)�”}”(hŒ7Freezing the scheduler tick and suspending timekeeping.”h]”hŒ7Freezing the scheduler tick and suspending timekeeping.”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KchjR ubj‘)�”}”(hX(When all devices have been suspended, CPUs enter the idle loop and are put into the deepest available idle state. While doing that, each of them "freezes" its own scheduler tick so that the timer events associated with the tick do not occur until the CPU is woken up by another interrupt source.”h]”hX,When all devices have been suspended, CPUs enter the idle loop and are put into the deepest available idle state. While doing that, each of them “freezesâ€� its own scheduler tick so that the timer events associated with the tick do not occur until the CPU is woken up by another interrupt source.”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KehjR ubj‘)�”}”(hX&The last CPU to enter the idle state also stops the timekeeping which (among other things) prevents high resolution timers from triggering going forward until the first CPU that is woken up restarts the timekeeping. That allows the CPUs to stay in the deep idle state relatively long in one go.”h]”hX&The last CPU to enter the idle state also stops the timekeeping which (among other things) prevents high resolution timers from triggering going forward until the first CPU that is woken up restarts the timekeeping. That allows the CPUs to stay in the deep idle state relatively long in one go.”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KjhjR ubj‘)�”}”(hX"From this point on, the CPUs can only be woken up by non-timer hardware interrupts. If that happens, they go back to the idle state unless the interrupt that woke up one of them comes from an IRQ that has been armed for system wakeup, in which case the system resume transition is started.”h]”hX"From this point on, the CPUs can only be woken up by non-timer hardware interrupts. If that happens, they go back to the idle state unless the interrupt that woke up one of them comes from an IRQ that has been armed for system wakeup, in which case the system resume transition is started.”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KphjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÄhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³hÇh´K0hj{h²hubjm)�”}”(hŒ.. _s2idle_resume:”h]”h}”(h]”h ]”h"]”h$]”h&]”jxj% uh1jlh´KÌhj{h²hh³hÇjzKubeh}”(h]”(Œ!suspend-to-idle-suspend-code-flow”jyeh ]”h"]”(Œ!suspend-to-idle suspend code flow”Œs2idle_suspend”eh$]”h&]”uh1j[hj]h²hh³hÇh´K+Œexpect_referenced_by_name”}”jµ jnsŒexpect_referenced_by_id”}”jyjnsjzKubj\)�”}”(hhh]”(ja)�”}”(hŒ Suspend-to-idle Resume Code Flow”h]”hŒ Suspend-to-idle Resume Code Flow”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj¼ h²hh³hÇh´Kyubj‘)�”}”(hŒŒThe following steps are taken in order to transition the system from the :ref:`suspend-to-idle ` sleep state into the working state:”h]”(hŒIThe following steps are taken in order to transition the system from the ”…”�”}”(hjÍ h²hh³Nh´Nubh)�”}”(hŒ:ref:`suspend-to-idle `”h]”j)�”}”(hj× h]”hŒsuspend-to-idle”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jã Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj&Œs2idle”uh1hh³hÇh´K{hjÍ ubhŒ$ sleep state into the working state:”…”�”}”(hjÍ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K{hj¼ h²hubj¿)�”}”(hX]1. Resuming timekeeping and unfreezing the scheduler tick. When one of the CPUs is woken up (by a non-timer hardware interrupt), it leaves the idle state entered in the last step of the preceding suspend transition, restarts the timekeeping (unless it has been restarted already by another CPU that woke up earlier) and the scheduler tick on that CPU is unfrozen. If the interrupt that has woken up the CPU was armed for system wakeup, the system resume transition begins. 2. Resuming devices and restoring the working-state configuration of IRQs. Devices are resumed in four phases called *noirq resume*, *early resume*, *resume* and *complete* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase). Every device is visited in each phase, but typically it is not physically accessed in more than two of them. The working-state configuration of IRQs is restored after the *noirq* resume phase and the runtime PM API is re-enabled for every device whose driver supports it during the *early* resume phase. 3. Thawing tasks. Tasks frozen in step 2 of the preceding `suspend `_ transition are "thawed", which means that they are woken up from the uninterruptible sleep that they went into at that time and user space tasks are allowed to exit the kernel. 4. Invoking system-wide resume notifiers. This is analogous to step 1 of the `suspend `_ transition and the same set of callbacks is invoked at this point, but a different "notification type" parameter value is passed to them. ”h]”jÅ)�”}”(hhh]”(jÊ)�”}”(hXØResuming timekeeping and unfreezing the scheduler tick. When one of the CPUs is woken up (by a non-timer hardware interrupt), it leaves the idle state entered in the last step of the preceding suspend transition, restarts the timekeeping (unless it has been restarted already by another CPU that woke up earlier) and the scheduler tick on that CPU is unfrozen. If the interrupt that has woken up the CPU was armed for system wakeup, the system resume transition begins. ”h]”(j‘)�”}”(hŒ7Resuming timekeeping and unfreezing the scheduler tick.”h]”hŒ7Resuming timekeeping and unfreezing the scheduler tick.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K~hj ubj‘)�”}”(hX0When one of the CPUs is woken up (by a non-timer hardware interrupt), it leaves the idle state entered in the last step of the preceding suspend transition, restarts the timekeeping (unless it has been restarted already by another CPU that woke up earlier) and the scheduler tick on that CPU is unfrozen.”h]”hX0When one of the CPUs is woken up (by a non-timer hardware interrupt), it leaves the idle state entered in the last step of the preceding suspend transition, restarts the timekeeping (unless it has been restarted already by another CPU that woke up earlier) and the scheduler tick on that CPU is unfrozen.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K€hj ubj‘)�”}”(hŒlIf the interrupt that has woken up the CPU was armed for system wakeup, the system resume transition begins.”h]”hŒlIf the interrupt that has woken up the CPU was armed for system wakeup, the system resume transition begins.”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K†hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubjÊ)�”}”(hX;Resuming devices and restoring the working-state configuration of IRQs. Devices are resumed in four phases called *noirq resume*, *early resume*, *resume* and *complete* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase). Every device is visited in each phase, but typically it is not physically accessed in more than two of them. The working-state configuration of IRQs is restored after the *noirq* resume phase and the runtime PM API is re-enabled for every device whose driver supports it during the *early* resume phase. ”h]”(j‘)�”}”(hŒGResuming devices and restoring the working-state configuration of IRQs.”h]”hŒGResuming devices and restoring the working-state configuration of IRQs.”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K‰hj: ubj‘)�”}”(hŒ¿Devices are resumed in four phases called *noirq resume*, *early resume*, *resume* and *complete* (see :ref:`driverapi_pm_devices` for more information on what exactly happens in each phase).”h]”(hŒ*Devices are resumed in four phases called ”…”�”}”(hjL h²hh³Nh´Nubj-)�”}”(hŒ*noirq resume*”h]”hŒ noirq resume”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjL ubhŒ, ”…”�”}”(hjL h²hh³Nh´Nubj-)�”}”(hŒ*early resume*”h]”hŒ early resume”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjL ubhŒ, ”…”�”}”(hjL h²hh³Nh´Nubj-)�”}”(hŒ*resume*”h]”hŒresume”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjL ubhŒ and ”…”�”}”(hjL h²hh³Nh´Nubj-)�”}”(hŒ *complete*”h]”hŒcomplete”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjL ubhŒ (see ”…”�”}”(hjL h²hh³Nh´Nubh)�”}”(hŒ:ref:`driverapi_pm_devices`”h]”j)�”}”(hjž h]”hŒdriverapi_pm_devices”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jhjœ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jª Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj&Œdriverapi_pm_devices”uh1hh³hÇh´K‹hjL ubhŒ= for more information on what exactly happens in each phase).”…”�”}”(hjL h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K‹hj: ubj‘)�”}”(hŒlEvery device is visited in each phase, but typically it is not physically accessed in more than two of them.”h]”hŒlEvery device is visited in each phase, but typically it is not physically accessed in more than two of them.”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K�hj: ubj‘)�”}”(hŒÂThe working-state configuration of IRQs is restored after the *noirq* resume phase and the runtime PM API is re-enabled for every device whose driver supports it during the *early* resume phase.”h]”(hŒ>The working-state configuration of IRQs is restored after the ”…”�”}”(hjÔ h²hh³Nh´Nubj-)�”}”(hŒ*noirq*”h]”hŒnoirq”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjÔ ubhŒh resume phase and the runtime PM API is re-enabled for every device whose driver supports it during the ”…”�”}”(hjÔ h²hh³Nh´Nubj-)�”}”(hŒ*early*”h]”hŒearly”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j,hjÔ ubhŒ resume phase.”…”�”}”(hjÔ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K’hj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubjÊ)�”}”(hXThawing tasks. Tasks frozen in step 2 of the preceding `suspend `_ transition are "thawed", which means that they are woken up from the uninterruptible sleep that they went into at that time and user space tasks are allowed to exit the kernel. ”h]”(j‘)�”}”(hŒThawing tasks.”h]”hŒThawing tasks.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K–hj ubj‘)�”}”(hŒõTasks frozen in step 2 of the preceding `suspend `_ transition are "thawed", which means that they are woken up from the uninterruptible sleep that they went into at that time and user space tasks are allowed to exit the kernel.”h]”(hŒ(Tasks frozen in step 2 of the preceding ”…”�”}”(hj h²hh³Nh´NubjÎ)�”}”(hŒ`suspend `_”h]”hŒsuspend”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œsuspend”jxjyuh1jÍhj j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œsuspend”ah$]”h&]”jxjyuh1jlj2 Œs2idle_suspend”hj j& KubhŒµ transition are “thawedâ€�, which means that they are woken up from the uninterruptible sleep that they went into at that time and user space tasks are allowed to exit the kernel.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K˜hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubjÊ)�”}”(hŒóInvoking system-wide resume notifiers. This is analogous to step 1 of the `suspend `_ transition and the same set of callbacks is invoked at this point, but a different "notification type" parameter value is passed to them. ”h]”(j‘)�”}”(hŒ&Invoking system-wide resume notifiers.”h]”hŒ&Invoking system-wide resume notifiers.”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K�hjR ubj‘)�”}”(hŒÉThis is analogous to step 1 of the `suspend `_ transition and the same set of callbacks is invoked at this point, but a different "notification type" parameter value is passed to them.”h]”(hŒ#This is analogous to step 1 of the ”…”�”}”(hjd h²hh³Nh´NubjÎ)�”}”(hŒ`suspend `_”h]”hŒsuspend”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œsuspend”jxjyuh1jÍhjd j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œsuspend”ah$]”h&]”jxjyuh1jlj2 Œs2idle_suspend”hjd j& KubhŒŽ transition and the same set of callbacks is invoked at this point, but a different “notification typeâ€� parameter value is passed to them.”…”�”}”(hjd h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KŸhjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubeh}”(h]”h ]”h"]”h$]”h&]”jš j› jœ hj� jž uh1jÄhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³hÇh´K~hj¼ h²hubeh}”(h]”(Œ suspend-to-idle-resume-code-flow”j% eh ]”h"]”(Œ suspend-to-idle resume code flow”Œ s2idle_resume”eh$]”h&]”uh1j[hj]h²hh³hÇh´Kyj¸ }”jª j¥ sjº }”j% j¥ sjzKubj\)�”}”(hhh]”(ja)�”}”(hŒ$Platform-dependent Suspend Code Flow”h]”hŒ$Platform-dependent Suspend Code Flow”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj¯ h²hh³hÇh´K¥ubj‘)�”}”(hŒ{The following steps are taken in order to transition the system from the working state to platform-dependent suspend state:”h]”hŒ{The following steps are taken in order to transition the system from the working state to platform-dependent suspend state:”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K§hj¯ h²hubj¿)�”}”(hXr 1. Invoking system-wide suspend notifiers. This step is the same as step 1 of the suspend-to-idle suspend transition described `above `_. 2. Freezing tasks. This step is the same as step 2 of the suspend-to-idle suspend transition described `above `_. 3. Suspending devices and reconfiguring IRQs. This step is analogous to step 3 of the suspend-to-idle suspend transition described `above `_, but the arming of IRQs for system wakeup generally does not have any effect on the platform. There are platforms that can go into a very deep low-power state internally when all CPUs in them are in sufficiently deep idle states and all I/O devices have been put into low-power states. On those platforms, suspend-to-idle can reduce system power very effectively. On the other platforms, however, low-level components (like interrupt controllers) need to be turned off in a platform-specific way (implemented in the hooks provided by the platform driver) to achieve comparable power reduction. That usually prevents in-band hardware interrupts from waking up the system, which must be done in a special platform-dependent way. Then, the configuration of system wakeup sources usually starts when system wakeup devices are suspended and is finalized by the platform suspend hooks later on. 4. Disabling non-boot CPUs. On some platforms the suspend hooks mentioned above must run in a one-CPU configuration of the system (in particular, the hardware cannot be accessed by any code running in parallel with the platform suspend hooks that may, and often do, trap into the platform firmware in order to finalize the suspend transition). For this reason, the CPU offline/online (CPU hotplug) framework is used to take all of the CPUs in the system, except for one (the boot CPU), offline (typically, the CPUs that have been taken offline go into deep idle states). This means that all tasks are migrated away from those CPUs and all IRQs are rerouted to the only CPU that remains online. 5. Suspending core system components. This prepares the core system components for (possibly) losing power going forward and suspends the timekeeping. 6. Platform-specific power removal. This is expected to remove power from all of the system components except for the memory controller and RAM (in order to preserve the contents of the latter) and some devices designated for system wakeup. In many cases control is passed to the platform firmware which is expected to finalize the suspend transition as needed. ”h]”jÅ)�”}”(hhh]”(jÊ)�”}”(hŒ™Invoking system-wide suspend notifiers. This step is the same as step 1 of the suspend-to-idle suspend transition described `above `_. ”h]”(j‘)�”}”(hŒ'Invoking system-wide suspend notifiers.”h]”hŒ'Invoking system-wide suspend notifiers.”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KªhjÕ ubj‘)�”}”(hŒoThis step is the same as step 1 of the suspend-to-idle suspend transition described `above `_.”h]”(hŒTThis step is the same as step 1 of the suspend-to-idle suspend transition described ”…”�”}”(hjç h²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxjyuh1jÍhjç j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxjyuh1jlj2 Œs2idle_suspend”hjç j& KubhŒ.”…”�”}”(hjç h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¬hjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubjÊ)�”}”(hŒ�Freezing tasks. This step is the same as step 2 of the suspend-to-idle suspend transition described `above `_. ”h]”(j‘)�”}”(hŒFreezing tasks.”h]”hŒFreezing tasks.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¯hj ubj‘)�”}”(hŒoThis step is the same as step 2 of the suspend-to-idle suspend transition described `above `_.”h]”(hŒTThis step is the same as step 2 of the suspend-to-idle suspend transition described ”…”�”}”(hj- h²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxjyuh1jÍhj- j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxjyuh1jlj2 Œs2idle_suspend”hj- j& KubhŒ.”…”�”}”(hj- h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K±hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubjÊ)�”}”(hXSuspending devices and reconfiguring IRQs. This step is analogous to step 3 of the suspend-to-idle suspend transition described `above `_, but the arming of IRQs for system wakeup generally does not have any effect on the platform. There are platforms that can go into a very deep low-power state internally when all CPUs in them are in sufficiently deep idle states and all I/O devices have been put into low-power states. On those platforms, suspend-to-idle can reduce system power very effectively. On the other platforms, however, low-level components (like interrupt controllers) need to be turned off in a platform-specific way (implemented in the hooks provided by the platform driver) to achieve comparable power reduction. That usually prevents in-band hardware interrupts from waking up the system, which must be done in a special platform-dependent way. Then, the configuration of system wakeup sources usually starts when system wakeup devices are suspended and is finalized by the platform suspend hooks later on. ”h]”(j‘)�”}”(hŒ*Suspending devices and reconfiguring IRQs.”h]”hŒ*Suspending devices and reconfiguring IRQs.”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K´hja ubj‘)�”}”(hŒÍThis step is analogous to step 3 of the suspend-to-idle suspend transition described `above `_, but the arming of IRQs for system wakeup generally does not have any effect on the platform.”h]”(hŒUThis step is analogous to step 3 of the suspend-to-idle suspend transition described ”…”�”}”(hjs h²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxjyuh1jÍhjs j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxjyuh1jlj2 Œs2idle_suspend”hjs j& KubhŒ^, but the arming of IRQs for system wakeup generally does not have any effect on the platform.”…”�”}”(hjs h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¶hja ubj‘)�”}”(hXThere are platforms that can go into a very deep low-power state internally when all CPUs in them are in sufficiently deep idle states and all I/O devices have been put into low-power states. On those platforms, suspend-to-idle can reduce system power very effectively.”h]”hXThere are platforms that can go into a very deep low-power state internally when all CPUs in them are in sufficiently deep idle states and all I/O devices have been put into low-power states. On those platforms, suspend-to-idle can reduce system power very effectively.”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kºhja ubj‘)�”}”(hŒåOn the other platforms, however, low-level components (like interrupt controllers) need to be turned off in a platform-specific way (implemented in the hooks provided by the platform driver) to achieve comparable power reduction.”h]”hŒåOn the other platforms, however, low-level components (like interrupt controllers) need to be turned off in a platform-specific way (implemented in the hooks provided by the platform driver) to achieve comparable power reduction.”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¿hja ubj‘)�”}”(hX'That usually prevents in-band hardware interrupts from waking up the system, which must be done in a special platform-dependent way. Then, the configuration of system wakeup sources usually starts when system wakeup devices are suspended and is finalized by the platform suspend hooks later on.”h]”hX'That usually prevents in-band hardware interrupts from waking up the system, which must be done in a special platform-dependent way. Then, the configuration of system wakeup sources usually starts when system wakeup devices are suspended and is finalized by the platform suspend hooks later on.”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÄhja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubjÊ)�”}”(hX¶Disabling non-boot CPUs. On some platforms the suspend hooks mentioned above must run in a one-CPU configuration of the system (in particular, the hardware cannot be accessed by any code running in parallel with the platform suspend hooks that may, and often do, trap into the platform firmware in order to finalize the suspend transition). For this reason, the CPU offline/online (CPU hotplug) framework is used to take all of the CPUs in the system, except for one (the boot CPU), offline (typically, the CPUs that have been taken offline go into deep idle states). This means that all tasks are migrated away from those CPUs and all IRQs are rerouted to the only CPU that remains online. ”h]”(j‘)�”}”(hŒDisabling non-boot CPUs.”h]”hŒDisabling non-boot CPUs.”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÊhjÑ ubj‘)�”}”(hX;On some platforms the suspend hooks mentioned above must run in a one-CPU configuration of the system (in particular, the hardware cannot be accessed by any code running in parallel with the platform suspend hooks that may, and often do, trap into the platform firmware in order to finalize the suspend transition).”h]”hX;On some platforms the suspend hooks mentioned above must run in a one-CPU configuration of the system (in particular, the hardware cannot be accessed by any code running in parallel with the platform suspend hooks that may, and often do, trap into the platform firmware in order to finalize the suspend transition).”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÌhjÑ ubj‘)�”}”(hŒâFor this reason, the CPU offline/online (CPU hotplug) framework is used to take all of the CPUs in the system, except for one (the boot CPU), offline (typically, the CPUs that have been taken offline go into deep idle states).”h]”hŒâFor this reason, the CPU offline/online (CPU hotplug) framework is used to take all of the CPUs in the system, except for one (the boot CPU), offline (typically, the CPUs that have been taken offline go into deep idle states).”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÒhjÑ ubj‘)�”}”(hŒzThis means that all tasks are migrated away from those CPUs and all IRQs are rerouted to the only CPU that remains online.”h]”hŒzThis means that all tasks are migrated away from those CPUs and all IRQs are rerouted to the only CPU that remains online.”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K×hjÑ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubjÊ)�”}”(hŒ•Suspending core system components. This prepares the core system components for (possibly) losing power going forward and suspends the timekeeping. ”h]”(j‘)�”}”(hŒ"Suspending core system components.”h]”hŒ"Suspending core system components.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÚhj ubj‘)�”}”(hŒpThis prepares the core system components for (possibly) losing power going forward and suspends the timekeeping.”h]”hŒpThis prepares the core system components for (possibly) losing power going forward and suspends the timekeeping.”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÜhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubjÊ)�”}”(hXjPlatform-specific power removal. This is expected to remove power from all of the system components except for the memory controller and RAM (in order to preserve the contents of the latter) and some devices designated for system wakeup. In many cases control is passed to the platform firmware which is expected to finalize the suspend transition as needed. ”h]”(j‘)�”}”(hŒ Platform-specific power removal.”h]”hŒ Platform-specific power removal.”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kßhj9 ubj‘)�”}”(hŒÌThis is expected to remove power from all of the system components except for the memory controller and RAM (in order to preserve the contents of the latter) and some devices designated for system wakeup.”h]”hŒÌThis is expected to remove power from all of the system components except for the memory controller and RAM (in order to preserve the contents of the latter) and some devices designated for system wakeup.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Káhj9 ubj‘)�”}”(hŒxIn many cases control is passed to the platform firmware which is expected to finalize the suspend transition as needed.”h]”hŒxIn many cases control is passed to the platform firmware which is expected to finalize the suspend transition as needed.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kåhj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÒ ubeh}”(h]”h ]”h"]”h$]”h&]”jš j› jœ hj� jž uh1jÄhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³hÇh´Kªhj¯ h²hubeh}”(h]”Œ$platform-dependent-suspend-code-flow”ah ]”h"]”Œ$platform-dependent suspend code flow”ah$]”h&]”uh1j[hj]h²hh³hÇh´K¥ubj\)�”}”(hhh]”(ja)�”}”(hŒ#Platform-dependent Resume Code Flow”h]”hŒ#Platform-dependent Resume Code Flow”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj� h²hh³hÇh´Kêubj‘)�”}”(hŒThe following steps are taken in order to transition the system from a platform-dependent suspend state into the working state:”h]”hŒThe following steps are taken in order to transition the system from a platform-dependent suspend state into the working state:”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kìhj� h²hubj¿)�”•â4}”(hX—1. Platform-specific system wakeup. The platform is woken up by a signal from one of the designated system wakeup devices (which need not be an in-band hardware interrupt) and control is passed back to the kernel (the working configuration of the platform may need to be restored by the platform firmware before the kernel gets control again). 2. Resuming core system components. The suspend-time configuration of the core system components is restored and the timekeeping is resumed. 3. Re-enabling non-boot CPUs. The CPUs disabled in step 4 of the preceding suspend transition are taken back online and their suspend-time configuration is restored. 4. Resuming devices and restoring the working-state configuration of IRQs. This step is the same as step 2 of the suspend-to-idle suspend transition described `above `_. 5. Thawing tasks. This step is the same as step 3 of the suspend-to-idle suspend transition described `above `_. 6. Invoking system-wide resume notifiers. This step is the same as step 4 of the suspend-to-idle suspend transition described `above `_.”h]”jÅ)�”}”(hhh]”(jÊ)�”}”(hXWPlatform-specific system wakeup. The platform is woken up by a signal from one of the designated system wakeup devices (which need not be an in-band hardware interrupt) and control is passed back to the kernel (the working configuration of the platform may need to be restored by the platform firmware before the kernel gets control again). ”h]”(j‘)�”}”(hŒ Platform-specific system wakeup.”h]”hŒ Platform-specific system wakeup.”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kïhj§ ubj‘)�”}”(hX4The platform is woken up by a signal from one of the designated system wakeup devices (which need not be an in-band hardware interrupt) and control is passed back to the kernel (the working configuration of the platform may need to be restored by the platform firmware before the kernel gets control again).”h]”hX4The platform is woken up by a signal from one of the designated system wakeup devices (which need not be an in-band hardware interrupt) and control is passed back to the kernel (the working configuration of the platform may need to be restored by the platform firmware before the kernel gets control again).”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kñhj§ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubjÊ)�”}”(hŒ‹Resuming core system components. The suspend-time configuration of the core system components is restored and the timekeeping is resumed. ”h]”(j‘)�”}”(hŒ Resuming core system components.”h]”hŒ Resuming core system components.”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K÷hjÍ ubj‘)�”}”(hŒhThe suspend-time configuration of the core system components is restored and the timekeeping is resumed.”h]”hŒhThe suspend-time configuration of the core system components is restored and the timekeeping is resumed.”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KùhjÍ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubjÊ)�”}”(hŒ¤Re-enabling non-boot CPUs. The CPUs disabled in step 4 of the preceding suspend transition are taken back online and their suspend-time configuration is restored. ”h]”(j‘)�”}”(hŒRe-enabling non-boot CPUs.”h]”hŒRe-enabling non-boot CPUs.”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kühjó ubj‘)�”}”(hŒ‡The CPUs disabled in step 4 of the preceding suspend transition are taken back online and their suspend-time configuration is restored.”h]”hŒ‡The CPUs disabled in step 4 of the preceding suspend transition are taken back online and their suspend-time configuration is restored.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kþhjó ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubjÊ)�”}”(hŒ¸Resuming devices and restoring the working-state configuration of IRQs. This step is the same as step 2 of the suspend-to-idle suspend transition described `above `_. ”h]”(j‘)�”}”(hŒGResuming devices and restoring the working-state configuration of IRQs.”h]”hŒGResuming devices and restoring the working-state configuration of IRQs.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhjubj‘)�”}”(hŒnThis step is the same as step 2 of the suspend-to-idle suspend transition described `above `_.”h]”(hŒTThis step is the same as step 2 of the suspend-to-idle suspend transition described ”…”�”}”(hj+h²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxj% uh1jÍhj+j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxj% uh1jlj2 Œ s2idle_resume”hj+j& KubhŒ.”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubjÊ)�”}”(hŒThawing tasks. This step is the same as step 3 of the suspend-to-idle suspend transition described `above `_. ”h]”(j‘)�”}”(hŒThawing tasks.”h]”hŒThawing tasks.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhj_ubj‘)�”}”(hŒnThis step is the same as step 3 of the suspend-to-idle suspend transition described `above `_.”h]”(hŒTThis step is the same as step 3 of the suspend-to-idle suspend transition described ”…”�”}”(hjqh²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxj% uh1jÍhjqj& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxj% uh1jlj2 Œ s2idle_resume”hjqj& KubhŒ.”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubjÊ)�”}”(hŒ–Invoking system-wide resume notifiers. This step is the same as step 4 of the suspend-to-idle suspend transition described `above `_.”h]”(j‘)�”}”(hŒ&Invoking system-wide resume notifiers.”h]”hŒ&Invoking system-wide resume notifiers.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M hj¥ubj‘)�”}”(hŒnThis step is the same as step 4 of the suspend-to-idle suspend transition described `above `_.”h]”(hŒTThis step is the same as step 4 of the suspend-to-idle suspend transition described ”…”�”}”(hj·h²hh³Nh´NubjÎ)�”}”(hŒ`above `_”h]”hŒabove”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œabove”jxj% uh1jÍhj·j& Kubjm)�”}”(hŒ ”h]”h}”(h]”h ]”h"]”Œabove”ah$]”h&]”jxj% uh1jlj2 Œ s2idle_resume”hj·j& KubhŒ.”…”�”}”(hj·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”jš j› jœ hj� jž uh1jÄhj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾h³hÇh´Kïhj� h²hubeh}”(h]”Œ#platform-dependent-resume-code-flow”ah ]”h"]”Œ#platform-dependent resume code flow”ah$]”h&]”uh1j[hj]h²hh³hÇh´Kêubeh}”(h]”Œsystem-suspend-code-flows”ah ]”h"]”Œsystem suspend code flows”ah$]”h&]”uh1j[hhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(j`NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j*Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”(j' j6 j| jÿ jE j‹ jCj‰jÏeŒsubstitution_defs”}”(hóhçjhöjjj jj/j#j>j2jMjAj\jPjkj_jzjnj‰j}j˜jŒj§j›j¶jªjÅj¹jÔjÈjãj×jòjæjjõjjjjj.j"j=j1jLj@j[jOjjj^jyjmjˆj|j—j‹j¦jšjµj©jÄj¸jÓjÇjâjÖjñjåjjôjjjjj-j!j<j0jKj?jZjNjij]jxjlj‡j{j–jŠj¥j™j´j¨jÃj·jÒjÆjájÕjðjäjÿjójjjjj,j j;j/jJj>jYjMjhj\jwjkj†jzj•j‰j¤j˜j³j§jÂj¶jÑjÅjàjÔjïjãjþjòj jjjj+jj:j.jIj=jXjLuŒsubstitution_names”}”(Œamp”hóŒapos”jŒast”jŒbrvbar”j Œbsol”j/Œcent”j>Œcolon”jMŒcomma”j\Œcommat”jkŒcopy”jzŒcurren”j‰Œdarr”j˜Œdeg”j§Œdivide”j¶Œdollar”jÅŒequals”jÔŒexcl”jãŒfrac12”jòŒfrac14”jŒfrac18”jŒfrac34”jŒfrac38”j.Œfrac58”j=Œfrac78”jLŒgt”j[Œhalf”jjŒhorbar”jyŒhyphen”jˆŒiexcl”j—Œiquest”j¦Œlaquo”jµŒlarr”jÄŒlcub”jÓŒldquo”jâŒlowbar”jñŒlpar”jŒlsqb”jŒlsquo”jŒlt”j-Œmicro”j<Œmiddot”jKŒnbsp”jZŒnot”jiŒnum”jxŒohm”j‡Œordf”j–Œordm”j¥Œpara”j´Œpercnt”jÃŒperiod”jÒŒplus”jáŒplusmn”jðŒpound”jÿŒquest”jŒquot”jŒraquo”j,Œrarr”j;Œrcub”jJŒrdquo”jYŒreg”jhŒrpar”jwŒrsqb”j†Œrsquo”j•Œsect”j¤Œsemi”j³Œshy”jÂŒsol”jÑŒsung”jàŒsup1”jïŒsup2”jþŒsup3”j Œtimes”jŒtrade”j+Œuarr”j:Œverbar”jIŒyen”jXuŒrefnames”}”(Œ s2idle_resume”]”(j' j jCj3j‰jyjÏj¿eŒs2idle_suspend”]”(j6 j& j| jl jÿ jï jE j5 j‹ j{ euŒrefids”}”(jy]”(jnj6 j| jÿ jE j‹ ej% ]”(j¥ j' jCj‰jÏeuŒnameids”}”(jjjµ jyj´ j± jª j% j© j¦ j~ j{ jüjùuŒ nametypes”}”(j‰jµ ˆj´ ‰jª ˆj© ‰j~ ‰jü‰uh}”(jj]jyj{j± j{j% j¼ j¦ j¼ j{ j¯ jùj� uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "below" is not referenced.”…”�”}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjâubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”KZuh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ-Hyperlink target "suspend" is not referenced.”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”K˜uh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ-Hyperlink target "suspend" is not referenced.”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”KŸuh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hj4sbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”K¬uh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hjNsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”K±uh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”K¶uh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Muh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hjœsbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”Muh1jàubjá)�”}”(hhh]”j‘)�”}”(hhh]”hŒ+Hyperlink target "above" is not referenced.”…”�”}”hj¶sbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”júŒsource”hÇŒline”M uh1jàubeŒ transformer”NŒ include_log”]”Œ.Documentation/admin-guide/pm/suspend-flows.rst”(NNNNt”†”aŒ decoration”Nh²hub.