€•Œ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”Œ./translations/zh_CN/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/zh_TW/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/it_IT/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ja_JP/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/ko_KR/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/pt_BR/dev-tools/context-analysis”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ./translations/sp_SP/dev-tools/context-analysis”Œ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³ŒH/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis.rst”h´Kubh¶)�”}”(hŒCopyright (C) 2025, Google LLC.”h]”hŒCopyright (C) 2025, Google LLC.”…”�”}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÇh´KubhŒtarget”“”)�”}”(hŒ.. _context-analysis:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œcontext-analysis”uh1hÖh´Khhh²hh³hÇubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒCompiler-Based Context Analysis”h]”hŒCompiler-Based Context Analysis”…”�”}”(hhëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1héhhæh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hXxContext Analysis is a language extension, which enables statically checking that required contexts are active (or inactive) by acquiring and releasing user-definable "context locks". An obvious application is lock-safety checking for the kernel's various synchronization primitives (each of which represents a "context lock"), and checking that locking rules are not violated.”h]”hX‚Context Analysis is a language extension, which enables statically checking that required contexts are active (or inactive) by acquiring and releasing user-definable “context locksâ€�. An obvious application is lock-safety checking for the kernel’s various synchronization primitives (each of which represents a “context lockâ€�), and checking that locking rules are not violated.”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K hhæh²hubhú)�”}”(hŒ�The Clang compiler currently supports the full set of context analysis features. To enable for Clang, configure the kernel with::”h]”hŒ€The Clang compiler currently supports the full set of context analysis features. To enable for Clang, configure the kernel with:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Khhæh²hubhŒ literal_block”“”)�”}”(hŒCONFIG_WARN_CONTEXT_ANALYSIS=y”h]”hŒCONFIG_WARN_CONTEXT_ANALYSIS=y”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Khhæh²hubhú)�”}”(hŒ'The feature requires Clang 23 or later.”h]”hŒ'The feature requires Clang 23 or later.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Khhæh²hubhú)�”}”(hŒŠThe analysis is *opt-in by default*, and requires declaring which modules and subsystems should be analyzed in the respective `Makefile`::”h]”(hŒThe analysis is ”…”�”}”(hj5h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*opt-in by default*”h]”hŒopt-in by default”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj5ubhŒ[, and requires declaring which modules and subsystems should be analyzed in the respective ”…”�”}”(hj5h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ `Makefile`”h]”hŒMakefile”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj5ubhŒ:”…”�”}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Khhæh²hubj)�”}”(hŒ CONTEXT_ANALYSIS_mymodule.o := y”h]”hŒ CONTEXT_ANALYSIS_mymodule.o := y”…”�”}”hjksbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Khhæh²hubhú)�”}”(hŒ/Or for all translation units in the directory::”h]”hŒ.Or for all translation units in the directory:”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Khhæh²hubj)�”}”(hŒCONTEXT_ANALYSIS := y”h]”hŒCONTEXT_ANALYSIS := y”…”�”}”hj‡sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´Khhæh²hubhú)�”}”(hŒžIt is possible to enable the analysis tree-wide, however, which will result in numerous false positive warnings currently and is *not* generally recommended::”h]”(hŒ�It is possible to enable the analysis tree-wide, however, which will result in numerous false positive warnings currently and is ”…”�”}”(hj•h²hh³Nh´Nubj>)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj•ubhŒ generally recommended:”…”�”}”(hj•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Khhæh²hubj)�”}”(hŒ"CONFIG_WARN_CONTEXT_ANALYSIS_ALL=y”h]”hŒ"CONFIG_WARN_CONTEXT_ANALYSIS_ALL=y”…”�”}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K"hhæh²hubhå)�”}”(hhh]”(hê)�”}”(hŒProgramming Model”h]”hŒProgramming Model”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1héhjÃh²hh³hÇh´K%ubhú)�”}”(hŒJThe below describes the programming model around using context lock types.”h]”hŒJThe below describes the programming model around using context lock types.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K'hjÃh²hubhŒnote”“”)�”}”(hŒöEnabling context analysis can be seen as enabling a dialect of Linux C with a Context System. Some valid patterns involving complex control-flow are constrained (such as conditional acquisition and later conditional release in the same function).”h]”hú)�”}”(hŒöEnabling context analysis can be seen as enabling a dialect of Linux C with a Context System. Some valid patterns involving complex control-flow are constrained (such as conditional acquisition and later conditional release in the same function).”h]”hŒöEnabling context analysis can be seen as enabling a dialect of Linux C with a Context System. Some valid patterns involving complex control-flow are constrained (such as conditional acquisition and later conditional release in the same function).”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K*hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jâhjÃh²hh³hÇh´Nubhú)�”}”(hXƒContext analysis is a way to specify permissibility of operations to depend on context locks being held (or not held). Typically we are interested in protecting data and code in a critical section by requiring a specific context to be active, for example by holding a specific lock. The analysis ensures that callers cannot perform an operation without the required context being active.”h]”hXƒContext analysis is a way to specify permissibility of operations to depend on context locks being held (or not held). Typically we are interested in protecting data and code in a critical section by requiring a specific context to be active, for example by holding a specific lock. The analysis ensures that callers cannot perform an operation without the required context being active.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K/hjÃh²hubhú)�”}”(hŒšContext locks are associated with named structs, along with functions that operate on struct instances to acquire and release the associated context lock.”h]”hŒšContext locks are associated with named structs, along with functions that operate on struct instances to acquire and release the associated context lock.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K5hjÃh²hubhú)�”}”(hXContext locks can be held either exclusively or shared. This mechanism allows assigning more precise privileges when a context is active, typically to distinguish where a thread may only read (shared) or also write (exclusive) to data guarded within a context.”h]”hXContext locks can be held either exclusively or shared. This mechanism allows assigning more precise privileges when a context is active, typically to distinguish where a thread may only read (shared) or also write (exclusive) to data guarded within a context.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K8hjÃh²hubhú)�”}”(hXThe set of contexts that are actually active in a given thread at a given point in program execution is a run-time concept. The static analysis works by calculating an approximation of that set, called the context environment. The context environment is calculated for every program point, and describes the set of contexts that are statically known to be active, or inactive, at that particular point. This environment is a conservative approximation of the full set of contexts that will actually be active in a thread at run-time.”h]”hXThe set of contexts that are actually active in a given thread at a given point in program execution is a run-time concept. The static analysis works by calculating an approximation of that set, called the context environment. The context environment is calculated for every program point, and describes the set of contexts that are statically known to be active, or inactive, at that particular point. This environment is a conservative approximation of the full set of contexts that will actually be active in a thread at run-time.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K=hjÃh²hubhú)�”}”(hŒaMore details are also documented `here `_.”h]”(hŒ!More details are also documented ”…”�”}”(hj4h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ?`here `_”h]”hŒhere”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œhere”Œrefuri”Œ5https://clang.llvm.org/docs/ThreadSafetyAnalysis.html”uh1j<hj4ubh×)�”}”(hŒ8 ”h]”h}”(h]”Œhere”ah ]”h"]”Œhere”ah$]”h&]”Œrefuri”jOuh1hÖŒ referenced”Khj4ubhŒ.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´KEhjÃh²hubjã)�”}”(hX#Clang's analysis explicitly does not infer context locks acquired or released by inline functions. It requires explicit annotations to (a) assert that it's not a bug if a context lock is released or acquired, and (b) to retain consistency between inline and non-inline function declarations.”h]”hú)�”}”(hX#Clang's analysis explicitly does not infer context locks acquired or released by inline functions. It requires explicit annotations to (a) assert that it's not a bug if a context lock is released or acquired, and (b) to retain consistency between inline and non-inline function declarations.”h]”hX'Clang’s analysis explicitly does not infer context locks acquired or released by inline functions. It requires explicit annotations to (a) assert that it’s not a bug if a context lock is released or acquired, and (b) to retain consistency between inline and non-inline function declarations.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´KIhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jâhjÃh²hh³hÇh´Nubhå)�”}”(hhh]”(hê)�”}”(hŒSupported Kernel Primitives”h]”hŒSupported Kernel Primitives”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1héhj€h²hh³hÇh´KOubhú)�”}”(hŒÚCurrently the following synchronization primitives are supported: `raw_spinlock_t`, `spinlock_t`, `rwlock_t`, `mutex`, `seqlock_t`, `bit_spinlock`, RCU, SRCU (`srcu_struct`), `rw_semaphore`, `local_lock_t`, `ww_mutex`.”h]”(hŒBCurrently the following synchronization primitives are supported: ”…”�”}”(hj‘h²hh³Nh´NubjR)�”}”(hŒ`raw_spinlock_t`”h]”hŒraw_spinlock_t”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”(hj‘h²hh³Nh´NubjR)�”}”(hŒ `spinlock_t`”h]”hŒ spinlock_t”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”hj‘sbjR)�”}”(hŒ `rwlock_t`”h]”hŒrwlock_t”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”hj‘sbjR)�”}”(hŒ`mutex`”h]”hŒmutex”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”hj‘sbjR)�”}”(hŒ `seqlock_t`”h]”hŒ seqlock_t”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”(hj‘h²hh³Nh´NubjR)�”}”(hŒ`bit_spinlock`”h]”hŒ bit_spinlock”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ , RCU, SRCU (”…”�”}”(hj‘h²hh³Nh´NubjR)�”}”(hŒ `srcu_struct`”h]”hŒ srcu_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ), ”…”�”}”(hj‘h²hh³Nh´NubjR)�”}”(hŒ`rw_semaphore`”h]”hŒ rw_semaphore”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”hj‘sbjR)�”}”(hŒ`local_lock_t`”h]”hŒ local_lock_t”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ, ”…”�”}”hj‘sbjR)�”}”(hŒ `ww_mutex`”h]”hŒww_mutex”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj‘ubhŒ.”…”�”}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´KQhj€h²hubhú)�”}”(hX­To initialize variables guarded by a context lock with an initialization function (``type_init(&lock)``), prefer using ``guard(type_init)(&lock)`` or ``scoped_guard(type_init, &lock) { ... }`` to initialize such guarded members or globals in the enclosing scope. This initializes the context lock and treats the context as active within the initialization scope (initialization implies exclusive access to the underlying object).”h]”(hŒSTo initialize variables guarded by a context lock with an initialization function (”…”�”}”(hjSh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``type_init(&lock)``”h]”hŒtype_init(&lock)”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjSubhŒ), prefer using ”…”�”}”(hjSh²hh³Nh´Nubj\)�”}”(hŒ``guard(type_init)(&lock)``”h]”hŒguard(type_init)(&lock)”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjSubhŒ or ”…”�”}”(hjSh²hh³Nh´Nubj\)�”}”(hŒ*``scoped_guard(type_init, &lock) { ... }``”h]”hŒ&scoped_guard(type_init, &lock) { ... }”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjSubhŒí to initialize such guarded members or globals in the enclosing scope. This initializes the context lock and treats the context as active within the initialization scope (initialization implies exclusive access to the underlying object).”…”�”}”(hjSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´KVhj€h²hubhú)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K]hj€h²hubj)�”}”(hŒ×struct my_data { spinlock_t lock; int counter __guarded_by(&lock); }; void init_my_data(struct my_data *d) { ... guard(spinlock_init)(&d->lock); d->counter = 0; ... }”h]”hŒ×struct my_data { spinlock_t lock; int counter __guarded_by(&lock); }; void init_my_data(struct my_data *d) { ... guard(spinlock_init)(&d->lock); d->counter = 0; ... }”…”�”}”hj§sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³hÇh´K_hj€h²hubhú)�”}”(hX=Alternatively, initializing guarded variables can be done with context analysis disabled, preferably in the smallest possible scope (due to lack of any other checking): either with a ``context_unsafe(var = init)`` expression, or by marking small initialization functions with the ``__context_unsafe(init)`` attribute.”h]”(hŒ·Alternatively, initializing guarded variables can be done with context analysis disabled, preferably in the smallest possible scope (due to lack of any other checking): either with a ”…”�”}”(hjµh²hh³Nh´Nubj\)�”}”(hŒ``context_unsafe(var = init)``”h]”hŒcontext_unsafe(var = init)”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjµubhŒC expression, or by marking small initialization functions with the ”…”�”}”(hjµh²hh³Nh´Nubj\)�”}”(hŒ``__context_unsafe(init)``”h]”hŒ__context_unsafe(init)”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjµubhŒ attribute.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Klhj€h²hubhú)�”}”(hX›Lockdep assertions, such as `lockdep_assert_held()`, inform the compiler's context analysis that the associated synchronization primitive is held after the assertion. This avoids false positives in complex control-flow scenarios and encourages the use of Lockdep where static analysis is limited. For example, this is useful when a function doesn't *always* require a lock, making `__must_hold()` inappropriate.”h]”(hŒLockdep assertions, such as ”…”�”}”(hjçh²hh³Nh´NubjR)�”}”(hŒ`lockdep_assert_held()`”h]”hŒlockdep_assert_held()”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjçubhX., inform the compiler’s context analysis that the associated synchronization primitive is held after the assertion. This avoids false positives in complex control-flow scenarios and encourages the use of Lockdep where static analysis is limited. For example, this is useful when a function doesn’t ”…”�”}”(hjçh²hh³Nh´Nubj>)�”}”(hŒ*always*”h]”hŒalways”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjçubhŒ require a lock, making ”…”�”}”(hjçh²hh³Nh´NubjR)�”}”(hŒ`__must_hold()`”h]”hŒ __must_hold()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjçubhŒ inappropriate.”…”�”}”(hjçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Krhj€h²hubeh}”(h]”Œsupported-kernel-primitives”ah ]”h"]”Œsupported kernel primitives”ah$]”h&]”uh1hähjÃh²hh³hÇh´KOubhå)�”}”(hhh]”(hê)�”}”(hŒKeywords”h]”hŒKeywords”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1héhj3h²hh³hÇh´KzubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ__guarded_by (C macro)”Œc.__guarded_by”hNt”auh1jDhj3h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ __guarded_by”h]”hŒdesc_signature_line”“”)�”}”(hŒ __guarded_by”h]”hŒ desc_name”“”)�”}”(hŒ __guarded_by”h]”hŒ desc_sig_name”“”)�”}”(hj^h]”hŒ __guarded_by”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jlhjhubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jfhjbh²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K*ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j`Œsphinx_line_type”Œ declarator”hj\h²hh³j„h´K*ubah}”(h]”jSah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jZh³j„h´K*hjWh²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjWh²hh³j„h´K*ubeh}”(h]”h ]”(Œc”Œmacro”eh"]”h$]”h&]”Œdomain”j§Œobjtype”j¨Œdesctype”j¨Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__guarded_by (...)``”h]”j\)�”}”(hj´h]”hŒ__guarded_by (...)”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K,hj3h²hubhŒ block_quote”“”)�”}”(hŒ]struct member and globals attribute, declares variable only accessible within active context ”h]”hú)�”}”(hŒ\struct member and globals attribute, declares variable only accessible within active context”h]”hŒ\struct member and globals attribute, declares variable only accessible within active context”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K*hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jÞh´K*hj3h²hubhŒ container”“”)�”}”(hXr**Parameters** ``...`` context lock instance pointer(s) **Description** Declares that the struct member or global variable is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks. .. code-block:: c struct some_state { spinlock_t lock; long counter __guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long counter __guarded_by(&lock1, &lock2); };”h]”(hú)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjíh]”hŒ Parameters”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K.hjçubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ)``...`` context lock instance pointer(s) ”h]”(hŒterm”“”)�”}”(hŒ``...``”h]”j\)�”}”(hjh]”hŒ...”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K,hj ubhŒ definition”“”)�”}”(hhh]”hú)�”}”(hŒ context lock instance pointer(s)”h]”hŒ context lock instance pointer(s)”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j)h´K,hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j)h´K,hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjQh]”hŒ Description”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K.hjçubhú)�”}”(hX#Declares that the struct member or global variable is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks.”h]”hX#Declares that the struct member or global variable is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K-hjçubj)�”}”(hŒÅstruct some_state { spinlock_t lock; long counter __guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long counter __guarded_by(&lock1, &lock2); };”h]”hŒÅstruct some_state { spinlock_t lock; long counter __guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long counter __guarded_by(&lock1, &lock2); };”…”�”}”hjvsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”j§Œhighlight_args”}”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K2hjçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__pt_guarded_by (C macro)”Œc.__pt_guarded_by”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__pt_guarded_by”h]”ja)�”}”(hŒ__pt_guarded_by”h]”jg)�”}”(hŒ__pt_guarded_by”h]”jm)�”}”(hj£h]”hŒ__pt_guarded_by”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj©ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj¥h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KBubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj¡h²hh³jÀh´KBubah}”(h]”jœah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÀh´KBhjžh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjžh²hh³jÀh´KBubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jÙj®jÙj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__pt_guarded_by (...)``”h]”j\)�”}”(hjßh]”hŒ__pt_guarded_by (...)”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KDhj3h²hubjË)�”}”(hŒdstruct member and globals attribute, declares pointed-to data only accessible within active context ”h]”hú)�”}”(hŒcstruct member and globals attribute, declares pointed-to data only accessible within active context”h]”hŒcstruct member and globals attribute, declares pointed-to data only accessible within active context”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KBhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jh´KBhj3h²hubjæ)�”}”(hX˜**Parameters** ``...`` context lock instance pointer(s) **Description** Declares that the data pointed to by the struct member pointer or global pointer is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks. .. code-block:: c struct some_state { spinlock_t lock; long *counter __pt_guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long *counter __pt_guarded_by(&lock1, &lock2); };”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KFhjubj)�”}”(hhh]”j )�”}”(hŒ)``...`` context lock instance pointer(s) ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj3h]”hŒ...”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KDhj-ubj+)�”}”(hhh]”hú)�”}”(hŒ context lock instance pointer(s)”h]”hŒ context lock instance pointer(s)”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jHh´KDhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jHh´KDhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjnh]”hŒ Description”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KFhjubhú)�”}”(hXADeclares that the data pointed to by the struct member pointer or global pointer is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks.”h]”hXADeclares that the data pointed to by the struct member pointer or global pointer is only accessible within the context entered by the given context lock(s). Read operations on the data require shared access to at least one of the context locks, while write operations require exclusive access to all listed context locks.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KEhjubj)�”}”(hŒÍstruct some_state { spinlock_t lock; long *counter __pt_guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long *counter __pt_guarded_by(&lock1, &lock2); };”h]”hŒÍstruct some_state { spinlock_t lock; long *counter __pt_guarded_by(&lock); }; struct some_state { spinlock_t lock1, lock2; long *counter __pt_guarded_by(&lock1, &lock2); };”…”�”}”hj“sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj„‰j…j§j†}”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KKhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒcontext_lock_struct (C macro)”Œc.context_lock_struct”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒcontext_lock_struct”h]”ja)�”}”(hŒcontext_lock_struct”h]”jg)�”}”(hŒcontext_lock_struct”h]”jm)�”}”(hj½h]”hŒcontext_lock_struct”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjÃubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj¿h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K[ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj»h²hh³jÚh´K[ubah}”(h]”j¶ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÚh´K[hj¸h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj¸h²hh³jÚh´K[ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jój®jój¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ#``context_lock_struct (name, ...)``”h]”j\)�”}”(hjùh]”hŒcontext_lock_struct (name, ...)”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K]hj3h²hubjË)�”}”(hŒ(declare or define a context lock struct ”h]”hú)�”}”(hŒ'declare or define a context lock struct”h]”hŒ'declare or define a context lock struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³j!h´K[hj3h²hubjæ)�”}”(hXö**Parameters** ``name`` struct name ``...`` variable arguments **Description** Helper to declare or define a struct type that is also a context lock. .. code-block:: c context_lock_struct(my_handle) { int foo; long bar; }; struct some_state { ... }; // ... declared elsewhere ... context_lock_struct(some_state); **Note** The implementation defines several helper functions that can acquire and release the context lock.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj.h]”hŒ Parameters”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K_hj(ubj)�”}”(hhh]”(j )�”}”(hŒ``name`` struct name ”h]”(j)�”}”(hŒ``name``”h]”j\)�”}”(hjMh]”hŒname”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K\hjGubj+)�”}”(hhh]”hú)�”}”(hŒ struct name”h]”hŒ struct name”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jbh´K\hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jbh´K\hjDubj )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj†h]”hŒ...”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj€ubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j›h´Khjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j›h´KhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj(ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjÁh]”hŒ Description”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj(ubhú)�”}”(hŒFHelper to declare or define a struct type that is also a context lock.”h]”hŒFHelper to declare or define a struct type that is also a context lock.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K]hj(ubj)�”}”(hŒ©context_lock_struct(my_handle) { int foo; long bar; }; struct some_state { ... }; // ... declared elsewhere ... context_lock_struct(some_state);”h]”hŒ©context_lock_struct(my_handle) { int foo; long bar; }; struct some_state { ... }; // ... declared elsewhere ... context_lock_struct(some_state);”…”�”}”hjæsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj„‰j…j§j†}”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K_hj(ubhú)�”}”(hŒ**Note**”h]”jð)�”}”(hjøh]”hŒNote”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Klhj(ubhú)�”}”(hŒbThe implementation defines several helper functions that can acquire and release the context lock.”h]”hŒbThe implementation defines several helper functions that can acquire and release the context lock.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kmhj(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ"disable_context_analysis (C macro)”Œc.disable_context_analysis”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒdisable_context_analysis”h]”ja)�”}”(hŒdisable_context_analysis”h]”jg)�”}”(hŒdisable_context_analysis”h]”jm)�”}”(hj7h]”hŒdisable_context_analysis”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj=ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj9h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K‡ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj5h²hh³jTh´K‡ubah}”(h]”j0ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jTh´K‡hj2h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj2h²hh³jTh´K‡ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jmj®jmj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``disable_context_analysis ()``”h]”j\)�”}”(hjsh]”hŒdisable_context_analysis ()”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K‰hj3h²hubjË)�”}”(hŒ€ disables context analysis **Description** Disables context analysis. Must be paired with a later enable_context_analysis(). ”h]”(jË)�”}”(hŒdisables context analysis ”h]”hú)�”}”(hŒdisables context analysis”h]”hŒdisables context analysis”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K‡hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jŸh´K‡hj‰ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj¨h]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K‰hj‰ubhú)�”}”(hŒQDisables context analysis. Must be paired with a later enable_context_analysis().”h]”hŒQDisables context analysis. Must be paired with a later enable_context_analysis().”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kˆhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jŸh´K‡hj3h²hubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ!enable_context_analysis (C macro)”Œc.enable_context_analysis”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒenable_context_analysis”h]”ja)�”}”(hŒenable_context_analysis”h]”jg)�”}”(hŒenable_context_analysis”h]”jm)�”}”(hjæh]”hŒenable_context_analysis”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjìubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhjèh²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K“ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hjäh²hh³j h´K“ubah}”(h]”jßah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j h´K“hjáh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjáh²hh³j h´K“ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­j j®j j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``enable_context_analysis ()``”h]”j\)�”}”(hj" h]”hŒenable_context_analysis ()”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K•hj3h²hubjË)�”}”(hŒ… re-enables context analysis **Description** Re-enables context analysis. Must be paired with a prior disable_context_analysis(). ”h]”(jË)�”}”(hŒre-enables context analysis ”h]”hú)�”}”(hŒre-enables context analysis”h]”hŒre-enables context analysis”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K“hj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jN h´K“hj8 ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjW h]”hŒ Description”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K•hj8 ubhú)�”}”(hŒTRe-enables context analysis. Must be paired with a prior disable_context_analysis().”h]”hŒTRe-enables context analysis. Must be paired with a prior disable_context_analysis().”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´K”hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jN h´K“hj3h²hubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒcontext_unsafe (C macro)”Œc.context_unsafe”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒcontext_unsafe”h]”ja)�”}”(hŒcontext_unsafe”h]”jg)�”}”(hŒcontext_unsafe”h]”jm)�”}”(hj• h]”hŒcontext_unsafe”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj› ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj— h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÄubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj“ h²hh³j² h´KÄubah}”(h]”jŽ ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j² h´KÄhj� h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj� h²hh³j² h´KÄubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jË j®jË j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``context_unsafe (...)``”h]”j\)�”}”(hjÑ h]”hŒcontext_unsafe (...)”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÆhj3h²hubjË)�”}”(hŒ,disable context checking for contained code ”h]”hú)�”}”(hŒ+disable context checking for contained code”h]”hŒ+disable context checking for contained code”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÄhjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jù h´KÄhj3h²hubjæ)�”}”(hX¾**Parameters** ``...`` variable arguments **Description** Disables context checking for contained statements or expression. .. code-block:: c struct some_data { spinlock_t lock; int counter __guarded_by(&lock); }; int foo(struct some_data *d) { // ... // other code that is still checked ... // ... return context_unsafe(d->counter); }”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÈhj ubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj% h]”hŒ...”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj# ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj ubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j: h´Khj; ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j: h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj` h]”hŒ Description”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj ubhú)�”}”(hŒADisables context checking for contained statements or expression.”h]”hŒADisables context checking for contained statements or expression.”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÅhj ubj)�”}”(hŒòstruct some_data { spinlock_t lock; int counter __guarded_by(&lock); }; int foo(struct some_data *d) { // ... // other code that is still checked ... // ... return context_unsafe(d->counter); }”h]”hŒòstruct some_data { spinlock_t lock; int counter __guarded_by(&lock); }; int foo(struct some_data *d) { // ... // other code that is still checked ... // ... return context_unsafe(d->counter); }”…”�”}”hj… sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj„‰j…j§j†}”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KÇhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__context_unsafe (C macro)”Œc.__context_unsafe”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__context_unsafe”h]”ja)�”}”(hŒ__context_unsafe”h]”jg)�”}”(hŒ__context_unsafe”h]”jm)�”}”(hj¯ h]”hŒ__context_unsafe”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjµ ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj± h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kßubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj­ h²hh³jÌ h´Kßubah}”(h]”j¨ ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÌ h´Kßhjª h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjª h²hh³jÌ h´Kßubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jå j®jå j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__context_unsafe (comment)``”h]”j\)�”}”(hjë h]”hŒ__context_unsafe (comment)”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Káhj3h²hubjË)�”}”(hŒ-function attribute, disable context checking ”h]”hú)�”}”(hŒ,function attribute, disable context checking”h]”hŒ,function attribute, disable context checking”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³j h´Kßhj3h²hubjæ)�”}”(hŒÙ**Parameters** ``comment`` comment explaining why opt-out is safe **Description** Function attribute denoting that context analysis is disabled for the whole function. Forces adding an inline comment as argument.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj h]”hŒ Parameters”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kãhj ubj)�”}”(hhh]”j )�”}”(hŒ3``comment`` comment explaining why opt-out is safe ”h]”(j)�”}”(hŒ ``comment``”h]”j\)�”}”(hj? h]”hŒcomment”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kàhj9 ubj+)�”}”(hhh]”hú)�”}”(hŒ&comment explaining why opt-out is safe”h]”hŒ&comment explaining why opt-out is safe”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jT h´KàhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jT h´Kàhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjz h]”hŒ Description”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kâhj ubhú)�”}”(hŒ‚Function attribute denoting that context analysis is disabled for the whole function. Forces adding an inline comment as argument.”h]”hŒ‚Function attribute denoting that context analysis is disabled for the whole function. Forces adding an inline comment as argument.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Káhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒtoken_context_lock (C macro)”Œc.token_context_lock”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒtoken_context_lock”h]”ja)�”}”(hŒtoken_context_lock”h]”jg)�”}”(hŒtoken_context_lock”h]”jm)�”}”(hj¹ h]”hŒtoken_context_lock”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj¿ ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj» h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kùubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj· h²hh³jÖ h´Kùubah}”(h]”j² ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÖ h´Kùhj´ h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj´ h²hh³jÖ h´Kùubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jï j®jï j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ"``token_context_lock (name, ...)``”h]”j\)�”}”(hjõ h]”hŒtoken_context_lock (name, ...)”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjó ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kûhj3h²hubjË)�”}”(hŒ1declare an abstract global context lock instance ”h]”hú)�”}”(hŒ0declare an abstract global context lock instance”h]”hŒ0declare an abstract global context lock instance”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³j h´Kùhj3h²hubjæ)�”}”(hX%**Parameters** ``name`` token context lock name ``...`` variable arguments **Description** Helper that declares an abstract global context lock instance **name**, but not backed by a real data structure (linker error if accidentally referenced). The type name is `__ctx_lock_**name**`.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj* h]”hŒ Parameters”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kýhj$ ubj)�”}”(hhh]”(j )�”}”(hŒ!``name`` token context lock name ”h]”(j)�”}”(hŒ``name``”h]”j\)�”}”(hjI h]”hŒname”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KúhjC ubj+)�”}”(hhh]”hú)�”}”(hŒtoken context lock name”h]”hŒtoken context lock name”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j^ h´Kúhj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjC ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j^ h´Kúhj@ ubj )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj‚ h]”hŒ...”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj| ubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j— h´Khj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j— h´Khj@ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj½ h]”hŒ Description”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj» ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj$ ubhú)�”}”(hŒÂHelper that declares an abstract global context lock instance **name**, but not backed by a real data structure (linker error if accidentally referenced). The type name is `__ctx_lock_**name**`.”h]”(hŒ>Helper that declares an abstract global context lock instance ”…”�”}”(hjÓ h²hh³Nh´Nubjð)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjÓ ubhŒf, but not backed by a real data structure (linker error if accidentally referenced). The type name is ”…”�”}”(hjÓ h²hh³Nh´NubjR)�”}”(hŒ`__ctx_lock_**name**`”h]”hŒ__ctx_lock_**name**”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÓ ubhŒ.”…”�”}”(hjÓ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Kûhj$ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ%token_context_lock_instance (C macro)”Œc.token_context_lock_instance”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒtoken_context_lock_instance”h]”ja)�”}”(hŒtoken_context_lock_instance”h]”jg)�”}”(hŒtoken_context_lock_instance”h]”jm)�”}”(hj h]”hŒtoken_context_lock_instance”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj& ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj" h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj h²hh³j= h´Mubah}”(h]”j ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j= h´Mhj h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj h²hh³j= h´Mubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jV j®jV j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ+``token_context_lock_instance (ctx, name)``”h]”j\)�”}”(hj\ h]”hŒ'token_context_lock_instance (ctx, name)”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhj3h²hubjË)�”}”(hŒ2declare another instance of a global context lock ”h]”hú)�”}”(hŒ1declare another instance of a global context lock”h]”hŒ1declare another instance of a global context lock”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³j„ h´Mhj3h²hubjæ)�”}”(hX¥**Parameters** ``ctx`` token context lock previously declared with token_context_lock() ``name`` name of additional global context lock instance **Description** Helper that declares an additional instance **name** of the same token context lock class **ctx**. This is helpful where multiple related token contexts are declared, to allow using the same underlying type (`__ctx_lock_**ctx**`) as function arguments.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj‘ h]”hŒ Parameters”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M hj‹ ubj)�”}”(hhh]”(j )�”}”(hŒI``ctx`` token context lock previously declared with token_context_lock() ”h]”(j)�”}”(hŒ``ctx``”h]”j\)�”}”(hj° h]”hŒctx”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjª ubj+)�”}”(hhh]”hú)�”}”(hŒ@token context lock previously declared with token_context_lock()”h]”hŒ@token context lock previously declared with token_context_lock()”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jÅ h´MhjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjª ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÅ h´Mhj§ ubj )�”}”(hŒ9``name`` name of additional global context lock instance ”h]”(j)�”}”(hŒ``name``”h]”j\)�”}”(hjé h]”hŒname”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjã ubj+)�”}”(hhh]”hú)�”}”(hŒ/name of additional global context lock instance”h]”hŒ/name of additional global context lock instance”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jþ h´Mhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjã ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jþ h´Mhj§ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj$h]”hŒ Description”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M hj‹ ubhú)�”}”(hŒüHelper that declares an additional instance **name** of the same token context lock class **ctx**. This is helpful where multiple related token contexts are declared, to allow using the same underlying type (`__ctx_lock_**ctx**`) as function arguments.”h]”(hŒ,Helper that declares an additional instance ”…”�”}”(hj:h²hh³Nh´Nubjð)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj:ubhŒ& of the same token context lock class ”…”�”}”(hj:h²hh³Nh´Nubjð)�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj:ubhŒo. This is helpful where multiple related token contexts are declared, to allow using the same underlying type (”…”�”}”(hj:h²hh³Nh´NubjR)�”}”(hŒ`__ctx_lock_**ctx**`”h]”hŒ__ctx_lock_**ctx**”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj:ubhŒ) as function arguments.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhj‹ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__must_hold (C macro)”Œ c.__must_hold”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ __must_hold”h]”ja)�”}”(hŒ __must_hold”h]”jg)�”}”(hŒ __must_hold”h]”jm)�”}”(hj™h]”hŒ __must_hold”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjŸubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj›h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj—h²hh³j¶h´Mubah}”(h]”j’ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j¶h´Mhj”h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj”h²hh³j¶h´Mubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jÏj®jÏj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__must_hold (...)``”h]”j\)�”}”(hjÕh]”hŒ__must_hold (...)”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhj3h²hubjË)�”}”(hŒh´Khj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j>h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjdh]”hŒ Description”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjubhú)�”}”(hŒfFunction attribute declaring that the caller must hold the given context lock instance(s) exclusively.”h]”hŒfFunction attribute declaring that the caller must hold the given context lock instance(s) exclusively.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__must_not_hold (C macro)”Œc.__must_not_hold”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__must_not_hold”h]”ja)�”}”(hŒ__must_not_hold”h]”jg)�”}”(hŒ__must_not_hold”h]”jm)�”}”(hj£h]”hŒ__must_not_hold”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj©ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj¥h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj¡h²hh³jÀh´Mubah}”(h]”jœah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÀh´Mhjžh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjžh²hh³jÀh´Mubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jÙj®jÙj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__must_not_hold (...)``”h]”j\)�”}”(hjßh]”hŒ__must_not_hold (...)”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M hj3h²hubjË)�”}”(hŒ6function attribute, caller must not hold context lock ”h]”hú)�”}”(hŒ5function attribute, caller must not hold context lock”h]”hŒ5function attribute, caller must not hold context lock”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jh´Mhj3h²hubjæ)�”}”(hŒ�**Parameters** ``...`` variable arguments **Description** Function attribute declaring that the caller must not hold the given context lock instance(s).”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M"hjubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”•zïh]”j\)�”}”(hj3h]”hŒ...”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj-ubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jHh´KhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jHh´Khj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjnh]”hŒ Description”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjubhú)�”}”(hŒ^Function attribute declaring that the caller must not hold the given context lock instance(s).”h]”hŒ^Function attribute declaring that the caller must not hold the given context lock instance(s).”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__acquires (C macro)”Œ c.__acquires”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ __acquires”h]”ja)�”}”(hŒ __acquires”h]”jg)�”}”(hŒ __acquires”h]”jm)�”}”(hj­h]”hŒ __acquires”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj³ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj¯h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M&ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj«h²hh³jÊh´M&ubah}”(h]”j¦ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÊh´M&hj¨h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj¨h²hh³jÊh´M&ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jãj®jãj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__acquires (...)``”h]”j\)�”}”(hjéh]”hŒ__acquires (...)”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M(hj3h²hubjË)�”}”(hŒ?function attribute, function acquires context lock exclusively ”h]”hú)�”}”(hŒ>function attribute, function acquires context lock exclusively”h]”hŒ>function attribute, function acquires context lock exclusively”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M&hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jh´M&hj3h²hubjæ)�”}”(hŒÁ**Parameters** ``...`` variable arguments **Description** Function attribute declaring that the function acquires the given context lock instance(s) exclusively, but does not release them.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjh]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M*hjubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj=h]”hŒ...”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj7ubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jRh´KhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jRh´Khj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjxh]”hŒ Description”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjubhú)�”}”(hŒ‚Function attribute declaring that the function acquires the given context lock instance(s) exclusively, but does not release them.”h]”hŒ‚Function attribute declaring that the function acquires the given context lock instance(s) exclusively, but does not release them.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M'hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__cond_acquires (C macro)”Œc.__cond_acquires”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__cond_acquires”h]”ja)�”}”(hŒ__cond_acquires”h]”jg)�”}”(hŒ__cond_acquires”h]”jm)�”}”(hj·h]”hŒ__cond_acquires”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj½ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj¹h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M;ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hjµh²hh³jÔh´M;ubah}”(h]”j°ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jÔh´M;hj²h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj²h²hh³jÔh´M;ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jíj®jíj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__cond_acquires (ret, x)``”h]”j\)�”}”(hjóh]”hŒ__cond_acquires (ret, x)”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M=hj3h²hubjË)�”}”(hŒOfunction attribute, function conditionally acquires a context lock exclusively ”h]”hú)�”}”(hŒNfunction attribute, function conditionally acquires a context lock exclusively”h]”hŒNfunction attribute, function conditionally acquires a context lock exclusively”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M;hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jh´M;hj3h²hubjæ)�”}”(hX®**Parameters** ``ret`` abstract value returned by function if context lock acquired ``x`` context lock instance pointer **Description** Function attribute declaring that the function conditionally acquires the given context lock instance **x** exclusively, but does not release it. The function return value **ret** denotes when the context lock is acquired. **ret** may be one of: true, false, nonzero, 0, nonnull, NULL.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj(h]”hŒ Parameters”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M?hj"ubj)�”}”(hhh]”(j )�”}”(hŒE``ret`` abstract value returned by function if context lock acquired ”h]”(j)�”}”(hŒ``ret``”h]”j\)�”}”(hjGh]”hŒret”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M=hjAubj+)�”}”(hhh]”hú)�”}”(hŒubj )�”}”(hŒ$``x`` context lock instance pointer ”h]”(j)�”}”(hŒ``x``”h]”j\)�”}”(hj€h]”hŒx”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M>hjzubj+)�”}”(hhh]”hú)�”}”(hŒcontext lock instance pointer”h]”hŒcontext lock instance pointer”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j•h´M>hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j•h´M>hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj"ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj»h]”hŒ Description”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M@hj"ubhú)�”}”(hŒÞFunction attribute declaring that the function conditionally acquires the given context lock instance **x** exclusively, but does not release it. The function return value **ret** denotes when the context lock is acquired.”h]”(hŒfFunction attribute declaring that the function conditionally acquires the given context lock instance ”…”�”}”(hjÑh²hh³Nh´Nubjð)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjÑubhŒA exclusively, but does not release it. The function return value ”…”�”}”(hjÑh²hh³Nh´Nubjð)�”}”(hŒ**ret**”h]”hŒret”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjÑubhŒ+ denotes when the context lock is acquired.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M?hj"ubhú)�”}”(hŒ>**ret** may be one of: true, false, nonzero, 0, nonnull, NULL.”h]”(jð)�”}”(hŒ**ret**”h]”hŒret”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubhŒ7 may be one of: true, false, nonzero, 0, nonnull, NULL.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MChj"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__releases (C macro)”Œ c.__releases”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ __releases”h]”ja)�”}”(hŒ __releases”h]”jg)�”}”(hŒ __releases”h]”jm)�”}”(hj;h]”hŒ __releases”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjAubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj=h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MIubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj9h²hh³jXh´MIubah}”(h]”j4ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jXh´MIhj6h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj6h²hh³jXh´MIubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jqj®jqj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__releases (...)``”h]”j\)�”}”(hjwh]”hŒ__releases (...)”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MKhj3h²hubjË)�”}”(hŒAfunction attribute, function releases a context lock exclusively ”h]”hú)�”}”(hŒ@function attribute, function releases a context lock exclusively”h]”hŒ@function attribute, function releases a context lock exclusively”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MIhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jŸh´MIhj3h²hubjæ)�”}”(hŒÙ**Parameters** ``...`` variable arguments **Description** Function attribute declaring that the function releases the given context lock instance(s) exclusively. The associated context(s) must be active on entry.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj¬h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MMhj¦ubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hjËh]”hŒ...”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´KhjÅubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jàh´Khjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jàh´KhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khj¦ubhú)�”}”(hŒšFunction attribute declaring that the function releases the given context lock instance(s) exclusively. The associated context(s) must be active on entry.”h]”hŒšFunction attribute declaring that the function releases the given context lock instance(s) exclusively. The associated context(s) must be active on entry.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MJhj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__acquire (C macro)”Œ c.__acquire”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ __acquire”h]”ja)�”}”(hŒ __acquire”h]”jg)�”}”(hŒ __acquire”h]”jm)�”}”(hjEh]”hŒ __acquire”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjKubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhjGh²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mrubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hjCh²hh³jbh´Mrubah}”(h]”j>ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jbh´Mrhj@h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj@h²hh³jbh´Mrubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­j{j®j{j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__acquire (x)``”h]”j\)�”}”(hj�h]”hŒ __acquire (x)”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mthj3h²hubjË)�”}”(hŒ-function to acquire context lock exclusively ”h]”hú)�”}”(hŒ,function to acquire context lock exclusively”h]”hŒ,function to acquire context lock exclusively”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mrhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³j©h´Mrhj3h²hubjæ)�”}”(hŒ—**Parameters** ``x`` context lock instance pointer **Description** No-op function that acquires the given context lock instance **x** exclusively.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hj¶h]”hŒ Parameters”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mvhj°ubj)�”}”(hhh]”j )�”}”(hŒ$``x`` context lock instance pointer ”h]”(j)�”}”(hŒ``x``”h]”j\)�”}”(hjÕh]”hŒx”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MshjÏubj+)�”}”(hhh]”hú)�”}”(hŒcontext lock instance pointer”h]”hŒcontext lock instance pointer”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jêh´Mshjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jêh´MshjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Muhj°ubhú)�”}”(hŒONo-op function that acquires the given context lock instance **x** exclusively.”h]”(hŒ=No-op function that acquires the given context lock instance ”…”�”}”(hj&h²hh³Nh´Nubjð)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj&ubhŒ exclusively.”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mthj°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__release (C macro)”Œ c.__release”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ __release”h]”ja)�”}”(hŒ __release”h]”jg)�”}”(hŒ __release”h]”jm)�”}”(hjah]”hŒ __release”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjgubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhjch²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mzubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj_h²hh³j~h´Mzubah}”(h]”jZah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j~h´Mzhj\h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj\h²hh³j~h´Mzubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­j—j®j—j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__release (x)``”h]”j\)�”}”(hj�h]”hŒ __release (x)”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M|hj3h²hubjË)�”}”(hŒ-function to release context lock exclusively ”h]”hú)�”}”(hŒ,function to release context lock exclusively”h]”hŒ,function to release context lock exclusively”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mzhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jÅh´Mzhj3h²hubjæ)�”}”(hŒ‹**Parameters** ``x`` context lock instance pointer **Description** No-op function that releases the given context lock instance **x**.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjÒh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M~hjÌubj)�”}”(hhh]”j )�”}”(hŒ$``x`` context lock instance pointer ”h]”(j)�”}”(hŒ``x``”h]”j\)�”}”(hjñh]”hŒx”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M{hjëubj+)�”}”(hhh]”hú)�”}”(hŒcontext lock instance pointer”h]”hŒcontext lock instance pointer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³jh´M{hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jh´M{hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hj,h]”hŒ Description”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M}hjÌubhú)�”}”(hŒCNo-op function that releases the given context lock instance **x**.”h]”(hŒ=No-op function that releases the given context lock instance ”…”�”}”(hjBh²hh³Nh´Nubjð)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjBubhŒ.”…”�”}”(hjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M|hjÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__must_hold_shared (C macro)”Œc.__must_hold_shared”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__must_hold_shared”h]”ja)�”}”(hŒ__must_hold_shared”h]”jg)�”}”(hŒ__must_hold_shared”h]”jm)�”}”(hj}h]”hŒ__must_hold_shared”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjƒubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhjh²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M‚ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj{h²hh³jšh´M‚ubah}”(h]”jvah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³jšh´M‚hjxh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjxh²hh³jšh´M‚ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­j³j®j³j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__must_hold_shared (...)``”h]”j\)�”}”(hj¹h]”hŒ__must_hold_shared (...)”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M„hj3h²hubjË)�”}”(hŒ9function attribute, caller must hold shared context lock ”h]”hú)�”}”(hŒ8function attribute, caller must hold shared context lock”h]”hŒ8function attribute, caller must hold shared context lock”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M‚hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jáh´M‚hj3h²hubjæ)�”}”(hŒ¬**Parameters** ``...`` variable arguments **Description** Function attribute declaring that the caller must hold the given context lock instance(s) with shared access.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjîh]”hŒ Parameters”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M†hjèubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hj h]”hŒ...”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j"h´Khj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j"h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjHh]”hŒ Description”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjèubhú)�”}”(hŒmFunction attribute declaring that the caller must hold the given context lock instance(s) with shared access.”h]”hŒmFunction attribute declaring that the caller must hold the given context lock instance(s) with shared access.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mƒhjèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__acquires_shared (C macro)”Œc.__acquires_shared”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__acquires_shared”h]”ja)�”}”(hŒ__acquires_shared”h]”jg)�”}”(hŒ__acquires_shared”h]”jm)�”}”(hj‡h]”hŒ__acquires_shared”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj�ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj‰h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MŠubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj…h²hh³j¤h´MŠubah}”(h]”j€ah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j¤h´MŠhj‚h²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‚h²hh³j¤h´MŠubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­j½j®j½j¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__acquires_shared (...)``”h]”j\)�”}”(hjÃh]”hŒ__acquires_shared (...)”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MŒhj3h²hubjË)�”}”(hŒ:function attribute, function acquires context lock shared ”h]”hú)�”}”(hŒ9function attribute, function acquires context lock shared”h]”hŒ9function attribute, function acquires context lock shared”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MŠhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jëh´MŠhj3h²hubjæ)�”}”(hŒÈ**Parameters** ``...`` variable arguments **Description** Function attribute declaring that the function acquires the given context lock instance(s) with shared access, but does not release them.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjøh]”hŒ Parameters”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´MŽhjòubj)�”}”(hhh]”j )�”}”(hŒ``...`` variable arguments ”h]”(j)�”}”(hŒ``...``”h]”j\)�”}”(hjh]”hŒ...”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjubj+)�”}”(hhh]”hú)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³j,h´Khj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j,h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubhú)�”}”(hŒ**Description**”h]”jð)�”}”(hjRh]”hŒ Description”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Khjòubhú)�”}”(hŒ‰Function attribute declaring that the function acquires the given context lock instance(s) with shared access, but does not release them.”h]”hŒ‰Function attribute declaring that the function acquires the given context lock instance(s) with shared access, but does not release them.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M‹hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ __cond_acquires_shared (C macro)”Œc.__cond_acquires_shared”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__cond_acquires_shared”h]”ja)�”}”(hŒ__cond_acquires_shared”h]”jg)�”}”(hŒ__cond_acquires_shared”h]”jm)�”}”(hj‘h]”hŒ__cond_acquires_shared”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhj—ubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhj“h²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M’ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hj�h²hh³j®h´M’ubah}”(h]”jŠah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j®h´M’hjŒh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjŒh²hh³j®h´M’ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jÇj®jÇj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ#``__cond_acquires_shared (ret, x)``”h]”j\)�”}”(hjÍh]”hŒ__cond_acquires_shared (ret, x)”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M”hj3h²hubjË)�”}”(hŒJfunction attribute, function conditionally acquires a context lock shared ”h]”hú)�”}”(hŒIfunction attribute, function conditionally acquires a context lock shared”h]”hŒIfunction attribute, function conditionally acquires a context lock shared”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M’hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jÊh³jõh´M’hj3h²hubjæ)�”}”(hXµ**Parameters** ``ret`` abstract value returned by function if context lock acquired ``x`` context lock instance pointer **Description** Function attribute declaring that the function conditionally acquires the given context lock instance **x** with shared access, but does not release it. The function return value **ret** denotes when the context lock is acquired. **ret** may be one of: true, false, nonzero, 0, nonnull, NULL.”h]”(hú)�”}”(hŒ**Parameters**”h]”jð)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M–hjüubj)�”}”(hhh]”(j )�”}”(hŒE``ret`` abstract value returned by function if context lock acquired ”h]”(j)�”}”(hŒ``ret``”h]”j\)�”}”(hj!h]”hŒret”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M”hjubj+)�”}”(hhh]”hú)�”}”(hŒ**ret** may be one of: true, false, nonzero, 0, nonnull, NULL.”h]”(jð)�”}”(hŒ**ret**”h]”hŒret”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhjÞubhŒ7 may be one of: true, false, nonzero, 0, nonnull, NULL.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´Mšhjüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jåhj3h²hh³Nh´NubjE)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jQŒ__releases_shared (C macro)”Œc.__releases_shared”hNt”auh1jDhj3h²hh³Nh´NubjV)�”}”(hhh]”(j[)�”}”(hŒ__releases_shared”h]”ja)�”}”(hŒ__releases_shared”h]”jg)�”}”(hŒ__releases_shared”h]”jm)�”}”(hjh]”hŒ__releases_shared”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jxah"]”h$]”h&]”uh1jlhjubah}”(h]”h ]”(jj€eh"]”h$]”h&]”hÅhÆuh1jfhjh²hh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj‹ˆuh1j`jŒj�hjh²hh³j2h´M ubah}”(h]”jah ]”(j‘j’eh"]”h$]”h&]”j–ˆj—)j˜huh1jZh³j2h´M hjh²hubjš)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j™hjh²hh³j2h´M ubeh}”(h]”h ]”(j§Œmacro”eh"]”h$]”h&]”j¬j§j­jKj®jKj¯‰j°‰j±‰uh1jUh²hhj3h³Nh´Nubhú)�”}”(hŒ``__releases_shared (...)``”h]”j\)�”}”(hjQh]”hŒ__releases_shared (...)”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hùh³Œu/var/lib/git/docbuild/linux/Documentation/dev-tools/context-analysis:124: ./include/linux/compiler-context-analysis.h”h´M¢hj3h²hubjË)�”}”(hŒ`_, with some keywords and documentation still using the thread-safety-analysis-only terminology. This was later changed and the feature became more flexible, gaining the ability to define custom "capabilities". Its foundations can be found in `Capability Systems `_, used to specify the permissibility of operations to depend on some "capability" being held (or not held).”h]”(hŒ$Clang originally called the feature ”…”�”}”(hjÉh²hh³Nh´Nubj=)�”}”(hŒQ`Thread Safety Analysis `_”h]”hŒThread Safety Analysis”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒThread Safety Analysis”jNŒ5https://clang.llvm.org/docs/ThreadSafetyAnalysis.html”uh1j<hjÉubh×)�”}”(hŒ8 ”h]”h}”(h]”Œthread-safety-analysis”ah ]”h"]”Œthread safety analysis”ah$]”h&]”Œrefuri”jáuh1hÖj]KhjÉubhŒö, with some keywords and documentation still using the thread-safety-analysis-only terminology. This was later changed and the feature became more flexible, gaining the ability to define custom “capabilitiesâ€�. Its foundations can be found in ”…”�”}”(hjÉh²hh³Nh´Nubj=)�”}”(hŒO`Capability Systems `_”h]”hŒCapability Systems”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCapability Systems”jNŒ7https://www.cs.cornell.edu/talc/papers/capabilities.pdf”uh1j<hjÉubh×)�”}”(hŒ: ”h]”h}”(h]”Œcapability-systems”ah ]”h"]”Œcapability systems”ah$]”h&]”Œrefuri”j uh1hÖj]KhjÉubhŒo, used to specify the permissibility of operations to depend on some “capabilityâ€� being held (or not held).”…”�”}”(hjÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´Kšhj¸h²hubhú)�”}”(hXBecause the feature is not just able to express capabilities related to synchronization primitives, and "capability" is already overloaded in the kernel, the naming chosen for the kernel departs from Clang's initial "Thread Safety" and "capability" nomenclature; we refer to the feature as "Context Analysis" to avoid confusion. The internal implementation still makes references to Clang's terminology in a few places, such as `-Wthread-safety` being the warning option that also still appears in diagnostic messages.”h]”(hXÀBecause the feature is not just able to express capabilities related to synchronization primitives, and “capabilityâ€� is already overloaded in the kernel, the naming chosen for the kernel departs from Clang’s initial “Thread Safetyâ€� and “capabilityâ€� nomenclature; we refer to the feature as “Context Analysisâ€� to avoid confusion. The internal implementation still makes references to Clang’s terminology in a few places, such as ”…”�”}”(hj h²hh³Nh´NubjR)�”}”(hŒ`-Wthread-safety`”h]”hŒ-Wthread-safety”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj ubhŒI being the warning option that also still appears in diagnostic messages.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hùh³hÇh´K£hj¸h²hubeh}”(h]”Œ background”ah ]”h"]”Œ background”ah$]”h&]”uh1hähhæh²hh³hÇh´K˜ubeh}”(h]”(Œcompiler-based-context-analysis”hãeh ]”h"]”(Œcompiler-based context analysis”Œcontext-analysis”eh$]”h&]”uh1hähhh²hh³hÇh´KŒexpect_referenced_by_name”}”jI hØsŒexpect_referenced_by_id”}”hãhØsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hé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”js Œ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”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”hã]”hØasŒnameids”}”(jI hãjH jE jµj²jYjVj0j-j­jªj@ j= jëjèj j uŒ nametypes”}”(jI ˆjH ‰jµ‰jYˆj0‰j­‰j@ ‰jëˆj ˆuh}”(hãhæjE hæj²jÃjVjPj-j€jªj3jSj\jœj¡j¶j»j0j5jßjäjŽ j“ j¨ j­ j² j· j j j’j—jœj¡j¦j«j°jµj4j9j>jCjZj_jvj{j€j…jŠj�jjjjj4j9jPjUjmjrj= 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]”hú)�”}”(hhh]”hŒ6Hyperlink target "context-analysis" is not referenced.”…”�”}”hjÝ sbah}”(h]”h ]”h"]”h$]”h&]”uh1hùhjÚ ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jØ ubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.