sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/basicsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/driver-api/basicsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h Driver Basicsh]h Driver Basics}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/basics.rsthKubh)}(hhh](h)}(hDriver Entry and Exit pointsh]hDriver Entry and Exit points}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlemodule_init (C macro) c.module_inithNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h module_inith]hdesc_signature_line)}(h module_inith]h desc_name)}(h module_inith]h desc_sig_name)}(hhh]h module_init}(hhhhhNhNubah}(h]h ]nah"]h$]h&]uh1hhhubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKRubah}(h]h ]h"]h$]h&]jj  add_permalinkuh1hsphinx_line_type declaratorhhhhhj hKRubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhj hKRhhhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jhhhhhj hKRubeh}(h]h ](cmacroeh"]h$]h&]domainj-objtypej.desctypej.noindex noindexentrynocontentsentryuh1hhhhhhNhNubh paragraph)}(h``module_init (x)``h]hliteral)}(hj<h]hmodule_init (x)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThhhhubh block_quote)}(h"driver initialization entry point h]j9)}(h!driver initialization entry pointh]h!driver initialization entry point}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKRhjVubah}(h]h ]h"]h$]h&]uh1jThjhhKRhhhhubh container)}(h**Parameters** ``x`` function to be run at kernel boot time or module insertion **Description** module_init() will either be called during do_initcalls() (if builtin) or at module insertion time (if a module). There can only be one per module.h](j9)}(h**Parameters**h]hstrong)}(hjwh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKVhjqubhdefinition_list)}(hhh]hdefinition_list_item)}(hA``x`` function to be run at kernel boot time or module insertion h](hterm)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKShjubh definition)}(hhh]j9)}(h:function to be run at kernel boot time or module insertionh]h:function to be run at kernel boot time or module insertion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKUhjqubj9)}(hmodule_init() will either be called during do_initcalls() (if builtin) or at module insertion time (if a module). There can only be one per module.h]hmodule_init() will either be called during do_initcalls() (if builtin) or at module insertion time (if a module). There can only be one per module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKThjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmodule_exit (C macro) c.module_exithNtauh1hhhhhhNhNubh)}(hhh](h)}(h module_exith]h)}(h module_exith]h)}(h module_exith]h)}(hjh]h module_exit}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK\ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj7hK\ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hK\hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj7hK\ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhhhNhNubj9)}(h``module_exit (x)``h]j?)}(hjVh]hmodule_exit (x)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hhhhubjU)}(hdriver exit entry point h]j9)}(hdriver exit entry pointh]hdriver exit entry point}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK\hjlubah}(h]h ]h"]h$]h&]uh1jThj~hK\hhhhubjp)}(hXB**Parameters** ``x`` function to be run when driver is removed **Description** module_exit() will wrap the driver clean-up code with cleanup_module() when used with rmmod when the driver is a module. If the driver is statically compiled into the kernel, module_exit() has no effect. There can only be one per module.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK`hjubj)}(hhh]j)}(h0``x`` function to be run when driver is removed h](j)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK]hjubj)}(hhh]j9)}(h)function to be run when driver is removedh]h)function to be run when driver is removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK_hjubj9)}(hmodule_exit() will wrap the driver clean-up code with cleanup_module() when used with rmmod when the driver is a module. If the driver is statically compiled into the kernel, module_exit() has no effect. There can only be one per module.h]hmodule_exit() will wrap the driver clean-up code with cleanup_module() when used with rmmod when the driver is a module. If the driver is statically compiled into the kernel, module_exit() has no effect. There can only be one per module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌklp_modinfo (C struct) c.klp_modinfohNtauh1hhhhhhNhNubh)}(hhh](h)}(h klp_modinfoh]h)}(hstruct klp_modinfoh](hdesc_sig_keyword)}(hstructh]hstruct}(hj,hhhNhNubah}(h]h ]kah"]h$]h&]uh1j*hj&hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhKgubhdesc_sig_space)}(h h]h }(hj>hhhNhNubah}(h]h ]wah"]h$]h&]uh1j<hj&hhhj;hKgubh)}(h klp_modinfoh]h)}(hj$h]h klp_modinfo}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj;hKgubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj;hKgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj;hKghjhhubj )}(hhh]j9)}(h3ELF information preserved from the livepatch moduleh]h3ELF information preserved from the livepatch module}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhM~hjphhubah}(h]h ]h"]h$]h&]uh1jhjhhhj;hKgubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubjp)}(hX8**Definition**:: struct klp_modinfo { Elf_Ehdr hdr; Elf_Shdr *sechdrs; char *secstrings; unsigned int symndx; }; **Members** ``hdr`` ELF header ``sechdrs`` Section header table ``secstrings`` String table for the section headers ``symndx`` The symbol table section indexh](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubh literal_block)}(hostruct klp_modinfo { Elf_Ehdr hdr; Elf_Shdr *sechdrs; char *secstrings; unsigned int symndx; };h]hostruct klp_modinfo { Elf_Ehdr hdr; Elf_Shdr *sechdrs; char *secstrings; unsigned int symndx; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh](j)}(h``hdr`` ELF header h](j)}(h``hdr``h]j?)}(hjh]hhdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j9)}(h ELF headerh]h ELF header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``sechdrs`` Section header table h](j)}(h ``sechdrs``h]j?)}(hjh]hsechdrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j9)}(hSection header tableh]hSection header table}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(h4``secstrings`` String table for the section headers h](j)}(h``secstrings``h]j?)}(hjTh]h secstrings}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjNubj)}(hhh]j9)}(h$String table for the section headersh]h$String table for the section headers}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubj)}(h)``symndx`` The symbol table section indexh](j)}(h ``symndx``h]j?)}(hjh]hsymndx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j9)}(hThe symbol table section indexh]hThe symbol table section index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtry_module_get (C function)c.try_module_gethNtauh1hhhhhhNhNubh)}(hhh](h)}(h+bool try_module_get (struct module *module)h]h)}(h*bool try_module_get(struct module *module)h](hdesc_sig_keyword_type)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(htry_module_geth]h)}(htry_module_geth]htry_module_get}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubhdesc_parameterlist)}(h(struct module *module)h]hdesc_parameter)}(hstruct module *moduleh](j+)}(hj.h]hstruct}(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj'ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubh)}(hhh]h)}(hmoduleh]hmodule}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftype identifier reftargetjKmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jd ASTIdentifier)}j_j sbc.try_module_getasbuh1hhj'ubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj'ubh)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h3take module refcount unless module is being removedh]h3take module refcount unless module is being removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubjp)}(hX**Parameters** ``struct module *module`` the module we should check for **Description** Only try to get a module reference count if the module is not being removed. This call will fail if the module is in the process of being removed. Care must also be taken to ensure the module exists and is alive prior to usage of this call. This can be gauranteed through two means: 1) Direct protection: you know an earlier caller must have increased the module reference through __module_get(). This can typically be achieved by having another entity other than the module itself increment the module reference count. 2) Implied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs's active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops. One of the real values to try_module_get() is the module_is_live() check which ensures that the caller of try_module_get() can yield to userspace module removal requests and gracefully fail if the module is on its way out. Returns true if the reference count was successfully incremented.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j)}(h9``struct module *module`` the module we should check for h](j)}(h``struct module *module``h]j?)}(hjh]hstruct module *module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j9)}(hthe module we should check forh]hthe module we should check for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj9)}(hOnly try to get a module reference count if the module is not being removed. This call will fail if the module is in the process of being removed.h]hOnly try to get a module reference count if the module is not being removed. This call will fail if the module is in the process of being removed.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj9)}(hCare must also be taken to ensure the module exists and is alive prior to usage of this call. This can be gauranteed through two means:h]hCare must also be taken to ensure the module exists and is alive prior to usage of this call. This can be gauranteed through two means:}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubhenumerated_list)}(hhh](h list_item)}(hDirect protection: you know an earlier caller must have increased the module reference through __module_get(). This can typically be achieved by having another entity other than the module itself increment the module reference count. h]j9)}(hDirect protection: you know an earlier caller must have increased the module reference through __module_get(). This can typically be achieved by having another entity other than the module itself increment the module reference count.h]hDirect protection: you know an earlier caller must have increased the module reference through __module_get(). This can typically be achieved by having another entity other than the module itself increment the module reference count.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjqubah}(h]h ]h"]h$]h&]uh1johjlubjp)}(hXImplied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs's active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops. h]j9)}(hXImplied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs's active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops.h]hXImplied protection: there is an implied protection against module removal. An example of this is the implied protection used by kernfs / sysfs. The sysfs store / read file operations are guaranteed to exist through the use of kernfs’s active reference (see kernfs_active()) and a sysfs / kernfs file removal cannot happen unless the same file is not active. Therefore, if a sysfs file is being read or written to the module which created it must still exist. It is therefore safe to use try_module_get() on module sysfs store / read ops.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubah}(h]h ]h"]h$]h&]uh1johjlubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jjhjubj9)}(hOne of the real values to try_module_get() is the module_is_live() check which ensures that the caller of try_module_get() can yield to userspace module removal requests and gracefully fail if the module is on its way out.h]hOne of the real values to try_module_get() is the module_is_live() check which ensures that the caller of try_module_get() can yield to userspace module removal requests and gracefully fail if the module is on its way out.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj9)}(hAReturns true if the reference count was successfully incremented.h]hAReturns true if the reference count was successfully incremented.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmodule_put (C function) c.module_puthNtauh1hhhhhhNhNubh)}(hhh](h)}(h'void module_put (struct module *module)h]h)}(h&void module_put(struct module *module)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h module_puth]h)}(h module_puth]h module_put}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct module *module)h]j&)}(hstruct module *moduleh](j+)}(hj.h]hstruct}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubh)}(hhh]h)}(hmoduleh]hmodule}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_jsb c.module_putasbuh1hhj%ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%release a reference count to a moduleh]h%release a reference count to a module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhhhNhNubjp)}(hX**Parameters** ``struct module *module`` the module we should release a reference count for **Description** If you successfully bump a reference count to a module with try_module_get(), when you are finished you must call module_put() to release that reference count.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j)}(hM``struct module *module`` the module we should release a reference count for h](j)}(h``struct module *module``h]j?)}(hjh]hstruct module *module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj)}(hhh]j9)}(h2the module we should release a reference count forh]h2the module we should release a reference count for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubj9)}(hIf you successfully bump a reference count to a module with try_module_get(), when you are finished you must call module_put() to release that reference count.h]hIf you successfully bump a reference count to a module with try_module_get(), when you are finished you must call module_put() to release that reference count.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:7: ./include/linux/module.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johhhhhNhNubeh}(h]driver-entry-and-exit-pointsah ]h"]driver entry and exit pointsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDriver device tableh]hDriver device table}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hhhhhK ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌusb_device_id (C struct)c.usb_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h usb_device_idh]h)}(hstruct usb_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h usb_device_idh]h)}(hjh]h usb_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhKubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjhKhj{hhubj )}(hhh]j9)}(h2identifies USB devices for probing and hotpluggingh]h2identifies USB devices for probing and hotplugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKRhjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(hX**Definition**:: struct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info ; }; **Members** ``match_flags`` Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info. ``idVendor`` USB vendor ID for a device; numbers are assigned by the USB forum to its members. ``idProduct`` Vendor-assigned product ID. ``bcdDevice_lo`` Low end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device. ``bcdDevice_hi`` High end of version number range. The range of product versions is inclusive. ``bDeviceClass`` Class of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device. ``bDeviceSubClass`` Subclass of device; associated with bDeviceClass. ``bDeviceProtocol`` Protocol of device; associated with bDeviceClass. ``bInterfaceClass`` Class of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes. ``bInterfaceSubClass`` Subclass of interface; associated with bInterfaceClass. ``bInterfaceProtocol`` Protocol of interface; associated with bInterfaceClass. ``bInterfaceNumber`` Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces. ``driver_info`` Holds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKVhjubj)}(hXestruct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info ; };h]hXestruct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info ; };}hj sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhjubj9)}(h **Members**h]jz)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhhjubj)}(hhh](j)}(hXI``match_flags`` Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info. h](j)}(h``match_flags``h]j?)}(hj5 h]h match_flags}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3 ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhj/ ubj)}(hhh]j9)}(hX8Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info.h]hX8Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info.}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKThjK ubah}(h]h ]h"]h$]h&]uh1jhj/ ubeh}(h]h ]h"]h$]h&]uh1jhjJ hKXhj, ubj)}(h_``idVendor`` USB vendor ID for a device; numbers are assigned by the USB forum to its members. h](j)}(h ``idVendor``h]j?)}(hjo h]hidVendor}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjm ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKZhji ubj)}(hhh]j9)}(hQUSB vendor ID for a device; numbers are assigned by the USB forum to its members.h]hQUSB vendor ID for a device; numbers are assigned by the USB forum to its members.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKYhj ubah}(h]h ]h"]h$]h&]uh1jhji ubeh}(h]h ]h"]h$]h&]uh1jhj hKZhj, ubj)}(h*``idProduct`` Vendor-assigned product ID. h](j)}(h ``idProduct``h]j?)}(hj h]h idProduct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK[hj ubj)}(hhh]j9)}(hVendor-assigned product ID.h]hVendor-assigned product ID.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hK[hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK[hj, ubj)}(h``bcdDevice_lo`` Low end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device. h](j)}(h``bcdDevice_lo``h]j?)}(hj h]h bcdDevice_lo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK^hj ubj)}(hhh]j9)}(hLow end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device.h]hLow end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK\hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK^hj, ubj)}(h```bcdDevice_hi`` High end of version number range. The range of product versions is inclusive. h](j)}(h``bcdDevice_hi``h]j?)}(hj h]h bcdDevice_hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK`hj ubj)}(hhh]j9)}(hNHigh end of version number range. The range of product versions is inclusive.h]hNHigh end of version number range. The range of product versions is inclusive.}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK_hj2 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj1 hK`hj, ubj)}(h``bDeviceClass`` Class of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device. h](j)}(h``bDeviceClass``h]j?)}(hjV h]h bDeviceClass}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjT ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKdhjP ubj)}(hhh]j9)}(hClass of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device.h]hClass of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device.}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKahjl ubah}(h]h ]h"]h$]h&]uh1jhjP ubeh}(h]h ]h"]h$]h&]uh1jhjk hKdhj, ubj)}(hF``bDeviceSubClass`` Subclass of device; associated with bDeviceClass. h](j)}(h``bDeviceSubClass``h]j?)}(hj h]hbDeviceSubClass}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKehj ubj)}(hhh]j9)}(h1Subclass of device; associated with bDeviceClass.h]h1Subclass of device; associated with bDeviceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKehj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKehj, ubj)}(hF``bDeviceProtocol`` Protocol of device; associated with bDeviceClass. h](j)}(h``bDeviceProtocol``h]j?)}(hj h]hbDeviceProtocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKfhj ubj)}(hhh]j9)}(h1Protocol of device; associated with bDeviceClass.h]h1Protocol of device; associated with bDeviceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKfhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKfhj, ubj)}(h``bInterfaceClass`` Class of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes. h](j)}(h``bInterfaceClass``h]j?)}(hj h]hbInterfaceClass}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKjhj ubj)}(hhh]j9)}(hClass of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes.h]hClass of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKghj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKjhj, ubj)}(hO``bInterfaceSubClass`` Subclass of interface; associated with bInterfaceClass. h](j)}(h``bInterfaceSubClass``h]j?)}(hj< h]hbInterfaceSubClass}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj: ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKkhj6 ubj)}(hhh]j9)}(h7Subclass of interface; associated with bInterfaceClass.h]h7Subclass of interface; associated with bInterfaceClass.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQ hKkhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hKkhj, ubj)}(hO``bInterfaceProtocol`` Protocol of interface; associated with bInterfaceClass. h](j)}(h``bInterfaceProtocol``h]j?)}(hju h]hbInterfaceProtocol}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjs ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKlhjo ubj)}(hhh]j9)}(h7Protocol of interface; associated with bInterfaceClass.h]h7Protocol of interface; associated with bInterfaceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKlhj ubah}(h]h ]h"]h$]h&]uh1jhjo ubeh}(h]h ]h"]h$]h&]uh1jhj hKlhj, ubj)}(h``bInterfaceNumber`` Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces. h](j)}(h``bInterfaceNumber``h]j?)}(hj h]hbInterfaceNumber}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKohj ubj)}(hhh]j9)}(h{Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces.h]h{Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKohj, ubj)}(h``driver_info`` Holds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h](j)}(h``driver_info``h]j?)}(hj h]h driver_info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKqhj ubj)}(hhh]j9)}(hHolds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h]hHolds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKphj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKqhj, ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hj+ h]h Description}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj) ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKuhj\hhubj9)}(hXIn most cases, drivers will create a table of device IDs by using USB_DEVICE(), or similar macros designed for that purpose. They will then export it to userspace using MODULE_DEVICE_TABLE(), and provide it to the USB core through their usb_driver structure.h]hXIn most cases, drivers will create a table of device IDs by using USB_DEVICE(), or similar macros designed for that purpose. They will then export it to userspace using MODULE_DEVICE_TABLE(), and provide it to the USB core through their usb_driver structure.}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKrhj\hhubj9)}(hXSee the usb_match_id() function for information about how matches are performed. Briefly, you will normally use one of several macros to help construct these entries. Each entry you provide will either identify one or more specific products, or will identify a class of products which have agreed to behave the same. You should put the more specific matches towards the beginning of your table, so that driver_info can record quirks of specific products.h]hXSee the usb_match_id() function for information about how matches are performed. Briefly, you will normally use one of several macros to help construct these entries. Each entry you provide will either identify one or more specific products, or will identify a class of products which have agreed to behave the same. You should put the more specific matches towards the beginning of your table, so that driver_info can record quirks of specific products.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKwhj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌACPI_DEVICE_CLASS (C macro)c.ACPI_DEVICE_CLASShNtauh1hhj\hhhNhNubh)}(hhh](h)}(hACPI_DEVICE_CLASSh]h)}(hACPI_DEVICE_CLASSh]h)}(hACPI_DEVICE_CLASSh]h)}(hjr h]hACPI_DEVICE_CLASS}(hj| hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjt hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjp hhhj hKubah}(h]jk ah ](jjeh"]h$]h&]jj)jhuh1hhj hKhjm hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjm hhhj hKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj\hNhNubj9)}(h"``ACPI_DEVICE_CLASS (_cls, _msk)``h]j?)}(hj h]hACPI_DEVICE_CLASS (_cls, _msk)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj\hhubjU)}(hRmacro used to describe an ACPI device with the PCI-defined class-code information h]j9)}(hQmacro used to describe an ACPI device with the PCI-defined class-code informationh]hQmacro used to describe an ACPI device with the PCI-defined class-code information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubah}(h]h ]h"]h$]h&]uh1jThj hKhj\hhubjp)}(hX4**Parameters** ``_cls`` the class, subclass, prog-if triple for this device ``_msk`` the class mask for this device **Description** This macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubj)}(hhh](j)}(h=``_cls`` the class, subclass, prog-if triple for this device h](j)}(h``_cls``h]j?)}(hj h]h_cls}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubj)}(hhh]j9)}(h3the class, subclass, prog-if triple for this deviceh]h3the class, subclass, prog-if triple for this device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h(``_msk`` the class mask for this device h](j)}(h``_msk``h]j?)}(hj; h]h_msk}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9 ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj5 ubj)}(hhh]j9)}(hthe class mask for this deviceh]hthe class mask for this device}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjP hKhjQ ubah}(h]h ]h"]h$]h&]uh1jhj5 ubeh}(h]h ]h"]h$]h&]uh1jhjP hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjv h]h Description}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubj9)}(hThis macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.h]hThis macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmdio_device_id (C struct)c.mdio_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hmdio_device_idh]h)}(hstruct mdio_device_idh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hKubh)}(hmdio_device_idh]h)}(hj h]hmdio_device_id}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hKhj hhubj )}(hhh]j9)}(h)identifies PHY devices on an MDIO/MII bush]h)identifies PHY devices on an MDIO/MII bus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMrhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(hX**Definition**:: struct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; }; **Members** ``phy_id`` The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY type ``phy_id_mask`` Defines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMvhjubj)}(hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };h]hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };}hj:sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMxhjubj9)}(h **Members**h]jz)}(hjKh]hMembers}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM}hjubj)}(hhh](j)}(h``phy_id`` The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY type h](j)}(h ``phy_id``h]j?)}(hjjh]hphy_id}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMvhjdubj)}(hhh]j9)}(h}The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY typeh](hThe result of (mdio_read(}(hjhhhNhNubh)}(h:c:type:`MII_PHYSID1`h]j?)}(hjh]h MII_PHYSID1}(hjhhhNhNubah}(h]h ](xrefj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocdriver-api/basics refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]sb reftarget MII_PHYSID1uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMthjubh) << 16 | mdio_read(}(hjhhhNhNubh)}(h:c:type:`MII_PHYSID2`h]j?)}(hjh]h MII_PHYSID2}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj MII_PHYSID2uh1hhjhMthjubh)) & }(hjhhhNhNubjz)}(h**phy_id_mask**h]h phy_id_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh for this PHY type}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMthjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjaubj)}(h``phy_id_mask`` Defines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](j)}(h``phy_id_mask``h]j?)}(hjh]h phy_id_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMwhjubj)}(hhh]j9)}(hqDefines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](h Defines the significant bits of }(hjhhhNhNubjz)}(h **phy_id**h]hphy_id}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhG. A value of 0 is used to terminate an array of struct mdio_device_id.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjaubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌamba_id (C struct) c.amba_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hamba_idh]h)}(hstruct amba_idh](j+)}(hj.h]hstruct}(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjihhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM~ubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhjzhM~ubh)}(hamba_idh]h)}(hjgh]hamba_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjzhM~ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhjzhM~ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhjzhM~hjbhhubj )}(hhh]j9)}(h"identifies a device on an AMBA bush]h"identifies a device on an AMBA bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhM~ubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(hX**Definition**:: struct amba_id { unsigned int id; unsigned int mask; void *data; }; **Members** ``id`` The significant bits if the hardware device ID ``mask`` Bitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id. ``data`` Private data used by the driver.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hestruct amba_id { unsigned int id; unsigned int mask; void *data; };h]hestruct amba_id { unsigned int id; unsigned int mask; void *data; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h6``id`` The significant bits if the hardware device ID h](j)}(h``id``h]j?)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h.The significant bits if the hardware device IDh]h.The significant bits if the hardware device ID}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h``mask`` Bitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id. h](j)}(h``mask``h]j?)}(hjUh]hmask}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjOubj)}(hhh]j9)}(hBitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id.h]hBitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjubj)}(h)``data`` Private data used by the driver.h](j)}(h``data``h]j?)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h Private data used by the driver.h]h Private data used by the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmips_cdmm_device_id (C struct)c.mips_cdmm_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hmips_cdmm_device_idh]h)}(hstruct mips_cdmm_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hmips_cdmm_device_idh]h)}(hjh]hmips_cdmm_device_id}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h#identifies devices in MIPS CDMM bush]h#identifies devices in MIPS CDMM bus}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj\hNhNubjp)}(hw**Definition**:: struct mips_cdmm_device_id { __u8 type; }; **Members** ``type`` Device type identifier.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjGubj)}(h.struct mips_cdmm_device_id { __u8 type; };h]h.struct mips_cdmm_device_id { __u8 type; };}hjhsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjGubj9)}(h **Members**h]jz)}(hjyh]hMembers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjGubj)}(hhh]j)}(h ``type`` Device type identifier.h](j)}(h``type``h]j?)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(hDevice type identifier.h]hDevice type identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmei_cl_device_id (C struct)c.mei_cl_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hmei_cl_device_idh]h)}(hstruct mei_cl_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hmei_cl_device_idh]h)}(hjh]hmei_cl_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hMEI client device identifierh]hMEI client device identifier}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jLj4jLj5j6j7uh1hhhhj\hNhNubjp)}(hX6**Definition**:: struct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; }; **Members** ``name`` helper name ``uuid`` client uuid ``version`` client protocol version ``driver_info`` information used by the driver.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjPubj)}(hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };h]hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };}hjqsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjPubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjPubj)}(hhh](j)}(h``name`` helper name h](j)}(h``name``h]j?)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h helper nameh]h helper name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``uuid`` client uuid h](j)}(h``uuid``h]j?)}(hjh]huuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h client uuidh]h client uuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``version`` client protocol version h](j)}(h ``version``h]j?)}(hjh]hversion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubj)}(hhh]j9)}(hclient protocol versionh]hclient protocol version}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h/``driver_info`` information used by the driver.h](j)}(h``driver_info``h]j?)}(hjLh]h driver_info}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjFubj)}(hhh]j9)}(hinformation used by the driver.h]hinformation used by the driver.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj9)}(h-identifies mei client device by uuid and nameh]h-identifies mei client device by uuid and name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrio_device_id (C struct)c.rio_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h rio_device_idh]h)}(hstruct rio_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h rio_device_idh]h)}(hjh]h rio_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hRIO device identifierh]hRIO device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j'j4j'j5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; }; **Members** ``did`` RapidIO device ID ``vid`` RapidIO vendor ID ``asm_did`` RapidIO assembly device ID ``asm_vid`` RapidIO assembly vendor IDh](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh:}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj+ubj)}(hIstruct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; };h]hIstruct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; };}hjLsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj+ubj9)}(h **Members**h]jz)}(hj]h]hMembers}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj+ubj)}(hhh](j)}(h``did`` RapidIO device ID h](j)}(h``did``h]j?)}(hj|h]hdid}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjvubj)}(hhh]j9)}(hRapidIO device IDh]hRapidIO device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h``vid`` RapidIO vendor ID h](j)}(h``vid``h]j?)}(hjh]hvid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(hRapidIO vendor IDh]hRapidIO vendor ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h'``asm_did`` RapidIO assembly device ID h](j)}(h ``asm_did``h]j?)}(hjh]hasm_did}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(hRapidIO assembly device IDh]hRapidIO assembly device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h&``asm_vid`` RapidIO assembly vendor IDh](j)}(h ``asm_vid``h]j?)}(hj'h]hasm_vid}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh]j9)}(hRapidIO assembly vendor IDh]hRapidIO assembly vendor ID}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjsubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj9)}(hcIdentifies a RapidIO device based on both the device/vendor IDs and the assembly device/vendor IDs.h]hcIdentifies a RapidIO device based on both the device/vendor IDs and the assembly device/vendor IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfsl_mc_device_id (C struct)c.fsl_mc_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hfsl_mc_device_idh]h)}(hstruct fsl_mc_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hfsl_mc_device_idh]h)}(hjh]hfsl_mc_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hMC object device identifierh]hMC object device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; }; **Members** ``vendor`` vendor ID ``obj_type`` MC object typeh](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubj)}(hKstruct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; };h]hKstruct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; };}hj'sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj9)}(h **Members**h]jz)}(hj8h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h``vendor`` vendor ID h](j)}(h ``vendor``h]j?)}(hjWh]hvendor}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjQubj)}(hhh]j9)}(h vendor IDh]h vendor ID}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjNubj)}(h``obj_type`` MC object typeh](j)}(h ``obj_type``h]j?)}(hjh]hobj_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubj)}(hhh]j9)}(hMC object typeh]hMC object type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjNubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj9)}(hType of entries in the "device Id" table for MC object devices supported by a MC object device driver. The last entry of the table has vendor set to 0x0h]hType of entries in the “device Id” table for MC object devices supported by a MC object device driver. The last entry of the table has vendor set to 0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtb_service_id (C struct)c.tb_service_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h tb_service_idh]h)}(hstruct tb_service_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhMubh)}(h tb_service_idh]h)}(hj h]h tb_service_id}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hThunderbolt service identifiersh]hThunderbolt service identifiers}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj\hNhNubjp)}(hX**Definition**:: struct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; }; **Members** ``match_flags`` Flags used to match the structure ``protocol_key`` Protocol key the service supports ``protocol_id`` Protocol id the service supports ``protocol_version`` Version of the protocol ``protocol_revision`` Revision of the protocol software ``driver_data`` Driver specific datah](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh:}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjoubj)}(hstruct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; };h]hstruct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjoubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM$hjoubj)}(hhh](j)}(h2``match_flags`` Flags used to match the structure h](j)}(h``match_flags``h]j?)}(hjh]h match_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h!Flags used to match the structureh]h!Flags used to match the structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``protocol_key`` Protocol key the service supports h](j)}(h``protocol_key``h]j?)}(hjh]h protocol_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h!Protocol key the service supportsh]h!Protocol key the service supports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``protocol_id`` Protocol id the service supports h](j)}(h``protocol_id``h]j?)}(hj2h]h protocol_id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj,ubj)}(hhh]j9)}(h Protocol id the service supportsh]h Protocol id the service supports}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h-``protocol_version`` Version of the protocol h](j)}(h``protocol_version``h]j?)}(hjkh]hprotocol_version}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjeubj)}(hhh]j9)}(hVersion of the protocolh]hVersion of the protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``protocol_revision`` Revision of the protocol software h](j)}(h``protocol_revision``h]j?)}(hjh]hprotocol_revision}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h!Revision of the protocol softwareh]h!Revision of the protocol software}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``driver_data`` Driver specific datah](j)}(h``driver_data``h]j?)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(hDriver specific datah]hDriver specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj9)}(hThunderbolt XDomain services are exposed as devices where each device carries the protocol information the service supports. Thunderbolt XDomain service drivers match against that information.h]hThunderbolt XDomain services are exposed as devices where each device carries the protocol information the service supports. Thunderbolt XDomain service drivers match against that information.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtypec_device_id (C struct)c.typec_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(htypec_device_idh]h)}(hstruct typec_device_idh](j+)}(hj.h]hstruct}(hj^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM#ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhjkhM#ubh)}(htypec_device_idh]h)}(hjXh]htypec_device_id}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjkhM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjkhM#ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjkhM#hjShhubj )}(hhh]j9)}(h%USB Type-C alternate mode identifiersh]h%USB Type-C alternate mode identifiers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM4hjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjkhM#ubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; }; **Members** ``svid`` Standard or Vendor ID ``mode`` Mode index ``driver_data`` Driver specific datah](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM8hjubj)}(hZstruct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; };h]hZstruct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM:hjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM@hjubj)}(hhh](j)}(h``svid`` Standard or Vendor ID h](j)}(h``svid``h]j?)}(hj h]hsvid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM6hjubj)}(hhh]j9)}(hStandard or Vendor IDh]hStandard or Vendor ID}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hM6hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM6hjubj)}(h``mode`` Mode index h](j)}(h``mode``h]j?)}(hjFh]hmode}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM7hj@ubj)}(hhh]j9)}(h Mode indexh]h Mode index}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hM7hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM7hjubj)}(h$``driver_data`` Driver specific datah](j)}(h``driver_data``h]j?)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM7hjyubj)}(hhh]j9)}(hDriver specific datah]hDriver specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM8hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtee_client_device_id (C struct)c.tee_client_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(htee_client_device_idh]h)}(hstruct tee_client_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM>ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM>ubh)}(htee_client_device_idh]h)}(hjh]htee_client_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM>hjhhubj )}(hhh]j9)}(htee based device identifierh]htee based device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM@hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j3j4j3j5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct tee_client_device_id { uuid_t uuid; }; **Members** ``uuid`` For TEE based client devices we use the device uuid as the identifier.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh:}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMDhj7ubj)}(h1struct tee_client_device_id { uuid_t uuid; };h]h1struct tee_client_device_id { uuid_t uuid; };}hjXsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMFhj7ubj9)}(h **Members**h]jz)}(hjih]hMembers}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMJhj7ubj)}(hhh]j)}(hO``uuid`` For TEE based client devices we use the device uuid as the identifier.h](j)}(h``uuid``h]j?)}(hjh]huuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMBhjubj)}(hhh]j9)}(hFFor TEE based client devices we use the device uuid as the identifier.h]hFFor TEE based client devices we use the device uuid as the identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwmi_device_id (C struct)c.wmi_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h wmi_device_idh]h)}(hstruct wmi_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMIubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMIubh)}(h wmi_device_idh]h)}(hjh]h wmi_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMIubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMIhjhhubj )}(hhh]j9)}(hWMI device identifierh]hWMI device identifier}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMIubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhj\hNhNubjp)}(hX **Definition**:: struct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; }; **Members** ``guid_string`` 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba ``context`` pointer to driver specific datah](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMQhj?ubj)}(hastruct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; };h]hastruct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; };}hj`sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMShj?ubj9)}(h **Members**h]jz)}(hjqh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMXhj?ubj)}(hhh](j)}(hP``guid_string`` 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba h](j)}(h``guid_string``h]j?)}(hjh]h guid_string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMOhjubj)}(hhh]j9)}(h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49bah]h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h+``context`` pointer to driver specific datah](j)}(h ``context``h]j?)}(hjh]hcontext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMOhjubj)}(hhh]j9)}(hpointer to driver specific datah]hpointer to driver specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmhi_device_id (C struct)c.mhi_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h mhi_device_idh]h)}(hstruct mhi_device_idh](j+)}(hj.h]hstruct}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMVubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj0hMVubh)}(h mhi_device_idh]h)}(hjh]h mhi_device_id}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj0hMVubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj0hMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj0hMVhjhhubj )}(hhh]j9)}(hMHI device identificationh]hMHI device identification}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM\hjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hMVubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j}j4j}j5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; }; **Members** ``chan`` MHI channel name ``driver_data`` driver data;h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM`hjubj)}(h]struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; };h]h]struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMbhjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMghjubj)}(hhh](j)}(h``chan`` MHI channel name h](j)}(h``chan``h]j?)}(hjh]hchan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM^hjubj)}(hhh]j9)}(hMHI channel nameh]hMHI channel name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubj)}(h``driver_data`` driver data;h](j)}(h``driver_data``h]j?)}(hj h]h driver_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM^hjubj)}(hhh]j9)}(h driver data;h]h driver data;}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM_hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM^hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdfl_device_id (C struct)c.dfl_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h dfl_device_idh]h)}(hstruct dfl_device_idh](j+)}(hj.h]hstruct}(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjahhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMeubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjrhMeubh)}(h dfl_device_idh]h)}(hj_h]h dfl_device_id}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjrhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhjrhMeubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjrhMehjZhhubj )}(hhh]j9)}(hdfl device identifierh]hdfl device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjrhMeubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj\hNhNubjp)}(hX/**Definition**:: struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; }; **Members** ``type`` DFL FIU type of the device. See enum dfl_id_type. ``feature_id`` feature identifier local to its DFL FIU type. ``driver_data`` driver specific data.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(h_struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; };h]h_struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h;``type`` DFL FIU type of the device. See enum dfl_id_type. h](j)}(h``type``h]j?)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(h1DFL FIU type of the device. See enum dfl_id_type.h]h1DFL FIU type of the device. See enum dfl_id_type.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj ubj)}(h=``feature_id`` feature identifier local to its DFL FIU type. h](j)}(h``feature_id``h]j?)}(hjMh]h feature_id}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjGubj)}(hhh]j9)}(h-feature identifier local to its DFL FIU type.h]h-feature identifier local to its DFL FIU type.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj ubj)}(h%``driver_data`` driver specific data.h](j)}(h``driver_data``h]j?)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]j9)}(hdriver specific data.h]hdriver specific data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌishtp_device_id (C struct)c.ishtp_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hishtp_device_idh]h)}(hstruct ishtp_device_idh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hishtp_device_idh]h)}(hjh]hishtp_device_id}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hISHTP device identifierh]hISHTP device identifier}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j: j4j: j5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; }; **Members** ``guid`` GUID of the device. ``driver_data`` pointer to driver specific datah](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB ubh:}(hjB hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj> ubj)}(hLstruct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; };h]hLstruct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; };}hj_ sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj> ubj9)}(h **Members**h]jz)}(hjp h]hMembers}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj> ubj)}(hhh](j)}(h``guid`` GUID of the device. h](j)}(h``guid``h]j?)}(hj h]hguid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubj)}(hhh]j9)}(hGUID of the device.h]hGUID of the device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h/``driver_data`` pointer to driver specific datah](j)}(h``driver_data``h]j?)}(hj h]h driver_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubj)}(hhh]j9)}(hpointer to driver specific datah]hpointer to driver specific data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcdx_device_id (C struct)c.cdx_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(h cdx_device_idh]h)}(hstruct cdx_device_idh](j+)}(hj.h]hstruct}(hj"!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hj0!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!hhhj/!hMubh)}(h cdx_device_idh]h)}(hj!h]h cdx_device_id}(hjB!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!hhhj/!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj/!hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1hhj/!hMhj!hhubj )}(hhh]j9)}(hCDX device identifierh]hCDX device identifier}(hjd!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhja!hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj/!hMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j|!j4j|!j5j6j7uh1hhhhj\hNhNubjp)}(hX**Definition**:: struct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; }; **Members** ``vendor`` Vendor ID ``device`` Device ID ``subvendor`` Subsystem vendor ID (or CDX_ANY_ID) ``subdevice`` Subsystem device ID (or CDX_ANY_ID) ``class`` Device class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient. ``class_mask`` Limit which sub-fields of the class field are compared. ``override_only`` Match only when dev->driver_override is this driver.h](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hstruct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; };h]hstruct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; };}hj!sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj9)}(h **Members**h]jz)}(hj!h]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh](j)}(h``vendor`` Vendor ID h](j)}(h ``vendor``h]j?)}(hj!h]hvendor}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh]j9)}(h Vendor IDh]h Vendor ID}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj!ubj)}(h``device`` Device ID h](j)}(h ``device``h]j?)}(hj "h]hdevice}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]j9)}(h Device IDh]h Device ID}(hj#"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hMhj "ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubj)}(h2``subvendor`` Subsystem vendor ID (or CDX_ANY_ID) h](j)}(h ``subvendor``h]j?)}(hjC"h]h subvendor}(hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj="ubj)}(hhh]j9)}(h#Subsystem vendor ID (or CDX_ANY_ID)h]h#Subsystem vendor ID (or CDX_ANY_ID)}(hj\"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX"hMhjY"ubah}(h]h ]h"]h$]h&]uh1jhj="ubeh}(h]h ]h"]h$]h&]uh1jhjX"hMhj!ubj)}(h2``subdevice`` Subsystem device ID (or CDX_ANY_ID) h](j)}(h ``subdevice``h]j?)}(hj|"h]h subdevice}(hj~"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjz"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjv"ubj)}(hhh]j9)}(h#Subsystem device ID (or CDX_ANY_ID)h]h#Subsystem device ID (or CDX_ANY_ID)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjv"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubj)}(hu``class`` Device class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient. h](j)}(h ``class``h]j?)}(hj"h]hclass}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]j9)}(hjDevice class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient.h]hjDevice class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubj)}(hG``class_mask`` Limit which sub-fields of the class field are compared. h](j)}(h``class_mask``h]j?)}(hj"h]h class_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]j9)}(h7Limit which sub-fields of the class field are compared.h]h7Limit which sub-fields of the class field are compared.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj!ubj)}(hF``override_only`` Match only when dev->driver_override is this driver.h](j)}(h``override_only``h]j?)}(hj(#h]h override_only}(hj*#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&#ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"#ubj)}(hhh]j9)}(h4Match only when dev->driver_override is this driver.h]h4Match only when dev->driver_override is this driver.}(hjA#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj>#ubah}(h]h ]h"]h$]h&]uh1jhj"#ubeh}(h]h ]h"]h$]h&]uh1jhj=#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubj9)}(h**Description**h]jz)}(hjk#h]h Description}(hjm#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji#ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubj9)}(hZType of entries in the "device Id" table for CDX devices supported by a CDX device driver.h]h^Type of entries in the “device Id” table for CDX devices supported by a CDX device driver.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj\hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcoreboot_device_id (C struct)c.coreboot_device_idhNtauh1hhj\hhhNhNubh)}(hhh](h)}(hcoreboot_device_idh]h)}(hstruct coreboot_device_idh](j+)}(hj.h]hstruct}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#hhhj#hMubh)}(hcoreboot_device_idh]h)}(hj#h]hcoreboot_device_id}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj#hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj#hMhj#hhubj )}(hhh]j9)}(h!Identifies a coreboot table entryh]h!Identifies a coreboot table entry}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hMubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj\hNhNubjp)}(h**Definition**:: struct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; }; **Members** ``tag`` tag ID ``driver_data`` driver specific datah](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj $ubh:}(hj $hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hMstruct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; };h]hMstruct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; };}hj($sbah}(h]h ]h"]h$]h&]jj uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj9)}(h **Members**h]jz)}(hj9$h]hMembers}(hj;$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7$ubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hhh](j)}(h``tag`` tag ID h](j)}(h``tag``h]j?)}(hjX$h]htag}(hjZ$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjV$ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjR$ubj)}(hhh]j9)}(htag IDh]htag ID}(hjq$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjm$hMhjn$ubah}(h]h ]h"]h$]h&]uh1jhjR$ubeh}(h]h ]h"]h$]h&]uh1jhjm$hMhjO$ubj)}(h$``driver_data`` driver specific datah](j)}(h``driver_data``h]j?)}(hj$h]h driver_data}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hhh]j9)}(hdriver specific datah]hdriver specific data}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8ha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjO$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj\hhhNhNubeh}(h]driver-device-tableah ]h"]driver device tableah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Delaying and scheduling routinesh]h Delaying and scheduling routines}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌprev_cputime (C struct)c.prev_cputimehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h prev_cputimeh]h)}(hstruct prev_cputimeh](j+)}(hj.h]hstruct}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj%hKubh)}(h prev_cputimeh]h)}(hj$h]h prev_cputime}(hj$%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj %ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj%hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj%hKubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhj%hKhj$hhubj )}(hhh]j9)}(h#snapshot of system and user cputimeh]h#snapshot of system and user cputime}(hjF%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMdhjC%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj%hKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3j^%j4j^%j5j6j7uh1hhhhj$hNhNubjp)}(hX%**Definition**:: struct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE; u64 utime; u64 stime; raw_spinlock_t lock; #endif; }; **Members** ``utime`` time spent in user mode ``stime`` time spent in system mode ``lock`` protects the above two fieldsh](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf%ubh:}(hjf%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhjb%ubj)}(hstruct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE; u64 utime; u64 stime; raw_spinlock_t lock; #endif; };h]hstruct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE; u64 utime; u64 stime; raw_spinlock_t lock; #endif; };}hj%sbah}(h]h ]h"]h$]h&]jj uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMjhjb%ubj9)}(h **Members**h]jz)}(hj%h]hMembers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMrhjb%ubj)}(hhh](j)}(h"``utime`` time spent in user mode h](j)}(h ``utime``h]j?)}(hj%h]hutime}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMfhj%ubj)}(hhh]j9)}(htime spent in user modeh]htime spent in user mode}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMfhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMfhj%ubj)}(h$``stime`` time spent in system mode h](j)}(h ``stime``h]j?)}(hj%h]hstime}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj%ubj)}(hhh]j9)}(htime spent in system modeh]htime spent in system mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMghj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMghj%ubj)}(h&``lock`` protects the above two fieldsh](j)}(h``lock``h]j?)}(hj%&h]hlock}(hj'&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#&ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj&ubj)}(hhh]j9)}(hprotects the above two fieldsh]hprotects the above two fields}(hj>&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhj;&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj:&hMghj%ubeh}(h]h ]h"]h$]h&]uh1jhjb%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubj9)}(h**Description**h]jz)}(hjh&h]h Description}(hjj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf&ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMkhj$hhubj9)}(hPStores previous user/system time values such that we can guarantee monotonicity.h]hPStores previous user/system time values such that we can guarantee monotonicity.}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhj$hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(__task_lazy_mmu_mode_active (C function)c.__task_lazy_mmu_mode_activehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h:bool __task_lazy_mmu_mode_active (struct task_struct *tsk)h]h)}(h9bool __task_lazy_mmu_mode_active(struct task_struct *tsk)h](j)}(hjh]hbool}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&hhhj&hMubh)}(h__task_lazy_mmu_mode_activeh]h)}(h__task_lazy_mmu_mode_activeh]h__task_lazy_mmu_mode_active}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj&hMubj )}(h(struct task_struct *tsk)h]j&)}(hstruct task_struct *tskh](j+)}(hj.h]hstruct}(hj&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hhh]h)}(h task_structh]h task_struct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj'modnameN classnameNjcjf)}ji]jl)}j_j&sbc.__task_lazy_mmu_mode_activeasbuh1hhj&ubj=)}(h h]h }(hj 'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj.'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(htskh]htsk}(hj;'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubah}(h]h ]h"]h$]h&]jj uh1jhj&hhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMhj&hhubj )}(hhh]j9)}(h(Test the lazy MMU mode state for a task.h]h(Test the lazy MMU mode state for a task.}(hje'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjb'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j}'j4j}'j5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct task_struct *tsk`` The task to check. **Description** Test whether **tsk** has its lazy MMU mode state set to active (i.e. enabled and not paused). This function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead. This function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubj)}(hhh]j)}(h/``struct task_struct *tsk`` The task to check. h](j)}(h``struct task_struct *tsk``h]j?)}(hj'h]hstruct task_struct *tsk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubj)}(hhh]j9)}(hThe task to check.h]hThe task to check.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubj9)}(h]Test whether **tsk** has its lazy MMU mode state set to active (i.e. enabled and not paused).h](h Test whether }(hj'hhhNhNubjz)}(h**tsk**h]htsk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubhI has its lazy MMU mode state set to active (i.e. enabled and not paused).}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubj9)}(hThis function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead.h]hThis function only considers the state saved in task_struct; to test whether current actually is in lazy MMU mode, is_lazy_mmu_mode_active() should be used instead.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubj9)}(hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h]hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.}(hj'(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$is_lazy_mmu_mode_active (C function)c.is_lazy_mmu_mode_activehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h#bool is_lazy_mmu_mode_active (void)h]h)}(h"bool is_lazy_mmu_mode_active(void)h](j)}(hjh]hbool}(hjV(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR(hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubj=)}(h h]h }(hjd(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR(hhhjc(hMubh)}(his_lazy_mmu_mode_activeh]h)}(his_lazy_mmu_mode_activeh]his_lazy_mmu_mode_active}(hjv(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjR(hhhjc(hMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubah}(h]h ]h"]h$]h&]jj uh1jhjR(hhhjc(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjN(hhhjc(hMubah}(h]jI(ah ](jjeh"]h$]h&]jj)jhuh1hhjc(hMhjK(hhubj )}(hhh]j9)}(h/Test whether we are currently in lazy MMU mode.h]h/Test whether we are currently in lazy MMU mode.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jhjK(hhhjc(hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhj$hNhNubjp)}(hXP**Parameters** ``void`` no arguments **Description** Test whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current task This function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h](j9)}(h**Parameters**h]jz)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj(h]hvoid}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKhj(ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hj8)h]h Description}(hj:)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6)ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKhj(ubj9)}(hTest whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current taskh]hTest whether the current context is in lazy MMU mode. This is true if both: 1. We are not in interrupt context 2. Lazy MMU mode is active for the current task}(hjN)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(ubj9)}(hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.h]hvThis function is intended for architectures that implement the lazy MMU mode; it must not be called from generic code.}(hj])hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!set_cpus_allowed_ptr (C function)c.set_cpus_allowed_ptrhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hPint set_cpus_allowed_ptr (struct task_struct *p, const struct cpumask *new_mask)h]h)}(hOint set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMeubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj)hMeubh)}(hset_cpus_allowed_ptrh]h)}(hset_cpus_allowed_ptrh]hset_cpus_allowed_ptr}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj)hMeubj )}(h7(struct task_struct *p, const struct cpumask *new_mask)h](j&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubh)}(hhh]h)}(h task_structh]h task_struct}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_j)sbc.set_cpus_allowed_ptrasbuh1hhj)ubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hjh]hp}(hj"*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubj&)}(hconst struct cpumask *new_maskh](j+)}(hconsth]hconst}(hj:*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6*ubj=)}(h h]h }(hjH*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6*ubj+)}(hj.h]hstruct}(hjV*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6*ubj=)}(h h]h }(hjc*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6*ubh)}(hhh]h)}(hcpumaskh]hcpumask}(hjt*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq*ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjv*modnameN classnameNjcjf)}ji]j*c.set_cpus_allowed_ptrasbuh1hhj6*ubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6*ubh)}(hnew_maskh]hnew_mask}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj)hMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj)hMeubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhj)hMehj)hhubj )}(hhh]j9)}(hset CPU affinity mask of a taskh]hset CPU affinity mask of a task}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMehj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMeubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct task_struct *p`` the task ``const struct cpumask *new_mask`` CPU affinity mask **Return** zero if successful, or a negative error codeh](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMihj*ubj)}(hhh](j)}(h#``struct task_struct *p`` the task h](j)}(h``struct task_struct *p``h]j?)}(hj+h]hstruct task_struct *p}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMfhj+ubj)}(hhh]j9)}(hthe taskh]hthe task}(hj1+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-+hMfhj.+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj-+hMfhj+ubj)}(h5``const struct cpumask *new_mask`` CPU affinity mask h](j)}(h"``const struct cpumask *new_mask``h]j?)}(hjQ+h]hconst struct cpumask *new_mask}(hjS+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjO+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghjK+ubj)}(hhh]j9)}(hCPU affinity maskh]hCPU affinity mask}(hjj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjf+hMghjg+ubah}(h]h ]h"]h$]h&]uh1jhjK+ubeh}(h]h ]h"]h$]h&]uh1jhjf+hMghj+ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h **Return**h]jz)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMihj*ubj9)}(h,zero if successful, or a negative error codeh]h,zero if successful, or a negative error code}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMihj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtask_nice (C function) c.task_nicehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+int task_nice (const struct task_struct *p)h]h)}(h*int task_nice(const struct task_struct *p)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMwubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+hhhj+hMwubh)}(h task_niceh]h)}(h task_niceh]h task_nice}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj+hMwubj )}(h(const struct task_struct *p)h]j&)}(hconst struct task_struct *ph](j+)}(hj<*h]hconst}(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ,ubj+)}(hj.h]hstruct}(hj),hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ,ubj=)}(h h]h }(hj6,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ,ubh)}(hhh]h)}(h task_structh]h task_struct}(hjG,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjD,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjI,modnameN classnameNjcjf)}ji]jl)}j_j+sb c.task_niceasbuh1hhj ,ubj=)}(h h]h }(hjg,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ,ubj)}(hjh]h*}(hju,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubh)}(hjh]hp}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubah}(h]h ]h"]h$]h&]jj uh1jhj+hhhj+hMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj+hMwubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhj+hMwhj+hhubj )}(hhh]j9)}(h&return the nice value of a given task.h]h&return the nice value of a given task.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMwhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMwubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj$hNhNubjp)}(hy**Parameters** ``const struct task_struct *p`` the task in question. **Return** The nice value [ -20 ... 0 ... 19 ].h](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM{hj,ubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]j?)}(hj,h]hconst struct task_struct *p}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMxhj,ubj)}(hhh]j9)}(hthe task in question.h]hthe task in question.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMxhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMxhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubj9)}(h **Return**h]jz)}(hj'-h]hReturn}(hj)-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%-ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMzhj,ubj9)}(h$The nice value [ -20 ... 0 ... 19 ].h]h$The nice value [ -20 ... 0 ... 19 ].}(hj=-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMzhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_idle_task (C function)c.is_idle_taskhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h/bool is_idle_task (const struct task_struct *p)h]h)}(h.bool is_idle_task(const struct task_struct *p)h](j)}(hjh]hbool}(hjl-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh-hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubj=)}(h h]h }(hjz-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjh-hhhjy-hMubh)}(h is_idle_taskh]h)}(h is_idle_taskh]h is_idle_task}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjh-hhhjy-hMubj )}(h(const struct task_struct *p)h]j&)}(hconst struct task_struct *ph](j+)}(hj<*h]hconst}(hj-hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-ubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubj+)}(hj.h]hstruct}(hj-hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-ubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hhh]h)}(h task_structh]h task_struct}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jl)}j_j-sbc.is_idle_taskasbuh1hhj-ubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hjh]hp}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-ubah}(h]h ]h"]h$]h&]jj uh1jhjh-hhhjy-hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjd-hhhjy-hMubah}(h]j_-ah ](jjeh"]h$]h&]jj)jhuh1hhjy-hMhja-hhubj )}(hhh]j9)}(h#is the specified task an idle task?h]h#is the specified task an idle task?}(hjE.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjB.hhubah}(h]h ]h"]h$]h&]uh1jhja-hhhjy-hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j].j4j].j5j6j7uh1hhhhj$hNhNubjp)}(h}**Parameters** ``const struct task_struct *p`` the task in question. **Return** 1 if **p** is an idle task. 0 otherwise.h](j9)}(h**Parameters**h]jz)}(hjg.h]h Parameters}(hji.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje.ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhja.ubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]j?)}(hj.h]hconst struct task_struct *p}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj.ubj)}(hhh]j9)}(hthe task in question.h]hthe task in question.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj}.ubah}(h]h ]h"]h$]h&]uh1jhja.ubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhja.ubj9)}(h(1 if **p** is an idle task. 0 otherwise.h](h1 if }(hj.hhhNhNubjz)}(h**p**h]hp}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh is an idle task. 0 otherwise.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhja.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwake_up_process (C function)c.wake_up_processhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+int wake_up_process (struct task_struct *p)h]h)}(h*int wake_up_process(struct task_struct *p)h](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM ubj=)}(h h]h }(hj'/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/hhhj&/hM ubh)}(hwake_up_processh]h)}(hwake_up_processh]hwake_up_process}(hj9/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj&/hM ubj )}(h(struct task_struct *p)h]j&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hjU/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQ/ubj=)}(h h]h }(hjb/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQ/ubh)}(hhh]h)}(h task_structh]h task_struct}(hjs/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetju/modnameN classnameNjcjf)}ji]jl)}j_j;/sbc.wake_up_processasbuh1hhjQ/ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQ/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ/ubh)}(hjh]hp}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjM/ubah}(h]h ]h"]h$]h&]jj uh1jhj/hhhj&/hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhj&/hM ubah}(h]j /ah ](jjeh"]h$]h&]jj)jhuh1hhj&/hM hj /hhubj )}(hhh]j9)}(hWake up a specific processh]hWake up a specific process}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM hj/hhubah}(h]h ]h"]h$]h&]uh1jhj /hhhj&/hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj$hNhNubjp)}(hXI**Parameters** ``struct task_struct *p`` The process to be woken up. **Description** Attempt to wake up the nominated process and move it to the set of runnable processes. This function executes a full memory barrier before accessing the task state. **Return** 1 if the process was woken up, 0 if it was already running.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj/ubj)}(hhh]j)}(h6``struct task_struct *p`` The process to be woken up. h](j)}(h``struct task_struct *p``h]j?)}(hj0h]hstruct task_struct *p}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM hj0ubj)}(hhh]j9)}(hThe process to be woken up.h]hThe process to be woken up.}(hj10hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-0hM hj.0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj-0hM hj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubj9)}(h**Description**h]jz)}(hjS0h]h Description}(hjU0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ0ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM hj/ubj9)}(hVAttempt to wake up the nominated process and move it to the set of runnable processes.h]hVAttempt to wake up the nominated process and move it to the set of runnable processes.}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM hj/ubj9)}(hMThis function executes a full memory barrier before accessing the task state.h]hMThis function executes a full memory barrier before accessing the task state.}(hjx0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj/ubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj/ubj9)}(h;1 if the process was woken up, 0 if it was already running.h]h;1 if the process was woken up, 0 if it was already running.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&preempt_notifier_register (C function)c.preempt_notifier_registerhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hBvoid preempt_notifier_register (struct preempt_notifier *notifier)h]h)}(hAvoid preempt_notifier_register(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0hhhj0hMubh)}(hpreempt_notifier_registerh]h)}(hpreempt_notifier_registerh]hpreempt_notifier_register}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj0hMubj )}(h#(struct preempt_notifier *notifier)h]j&)}(h!struct preempt_notifier *notifierh](j+)}(hj.h]hstruct}(hj 1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj1ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1ubh)}(hhh]h)}(hpreempt_notifierh]hpreempt_notifier}(hj)1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+1modnameN classnameNjcjf)}ji]jl)}j_j0sbc.preempt_notifier_registerasbuh1hhj1ubj=)}(h h]h }(hjI1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1ubj)}(hjh]h*}(hjW1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hnotifierh]hnotifier}(hjd1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj1ubah}(h]h ]h"]h$]h&]jj uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhj0hMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1hhj0hMhj0hhubj )}(hhh]j9)}(h5tell me when current is being preempted & rescheduledh]h5tell me when current is being preempted & rescheduled}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj$hNhNubjp)}(hS**Parameters** ``struct preempt_notifier *notifier`` notifier struct to registerh](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubj)}(hhh]j)}(hA``struct preempt_notifier *notifier`` notifier struct to registerh](j)}(h%``struct preempt_notifier *notifier``h]j?)}(hj1h]h!struct preempt_notifier *notifier}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubj)}(hhh]j9)}(hnotifier struct to registerh]hnotifier struct to register}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(preempt_notifier_unregister (C function)c.preempt_notifier_unregisterhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDvoid preempt_notifier_unregister (struct preempt_notifier *notifier)h]h)}(hCvoid preempt_notifier_unregister(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hj)2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%2hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubj=)}(h h]h }(hj82hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%2hhhj72hMubh)}(hpreempt_notifier_unregisterh]h)}(hpreempt_notifier_unregisterh]hpreempt_notifier_unregister}(hjJ2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%2hhhj72hMubj )}(h#(struct preempt_notifier *notifier)h]j&)}(h!struct preempt_notifier *notifierh](j+)}(hj.h]hstruct}(hjf2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjb2ubj=)}(h h]h }(hjs2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjb2ubh)}(hhh]h)}(hpreempt_notifierh]hpreempt_notifier}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jl)}j_jL2sbc.preempt_notifier_unregisterasbuh1hhjb2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjb2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb2ubh)}(hnotifierh]hnotifier}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^2ubah}(h]h ]h"]h$]h&]jj uh1jhj%2hhhj72hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!2hhhj72hMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1hhj72hMhj2hhubj )}(hhh]j9)}(h0no longer interested in preemption notificationsh]h0no longer interested in preemption notifications}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj72hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j3j4j3j5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct preempt_notifier *notifier`` notifier struct to unregister **Description** This is *not* safe to call from within a preemption notifier.h](j9)}(h**Parameters**h]jz)}(hj 3h]h Parameters}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 3ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj3ubj)}(hhh]j)}(hD``struct preempt_notifier *notifier`` notifier struct to unregister h](j)}(h%``struct preempt_notifier *notifier``h]j?)}(hj*3h]h!struct preempt_notifier *notifier}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj$3ubj)}(hhh]j9)}(hnotifier struct to unregisterh]hnotifier struct to unregister}(hjC3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?3hMhj@3ubah}(h]h ]h"]h$]h&]uh1jhj$3ubeh}(h]h ]h"]h$]h&]uh1jhj?3hMhj!3ubah}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hje3h]h Description}(hjg3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc3ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj3ubj9)}(h=This is *not* safe to call from within a preemption notifier.h](hThis is }(hj{3hhhNhNubhemphasis)}(h*not*h]hnot}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj{3ubh0 safe to call from within a preemption notifier.}(hj{3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%preempt_schedule_notrace (C function)c.preempt_schedule_notracehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h6__visible void notrace preempt_schedule_notrace (void)h]h)}(h5__visible void notrace preempt_schedule_notrace(void)h](h __visible}(hj3hhhNhNubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubj)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhj3hMubhnotrace}(hj3hhhNhNubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhj3hMubh)}(hpreempt_schedule_notraceh]h)}(hpreempt_schedule_notraceh]hpreempt_schedule_notrace}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhj3hMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]noemphjj uh1j%hj4ubah}(h]h ]h"]h$]h&]jj uh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhj3hMhj3hhubj )}(hhh]j9)}(h"preempt_schedule called by tracingh]h"preempt_schedule called by tracing}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjF4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3ja4j4ja4j5j6j7uh1hhhhj$hNhNubjp)}(hXS**Parameters** ``void`` no arguments **Description** The tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode. To prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.h](j9)}(h**Parameters**h]jz)}(hjk4h]h Parameters}(hjm4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji4ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhje4ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj4h]hvoid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhj4ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhje4ubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhje4ubj9)}(hXzThe tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode.h]hXzThe tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhje4ubj9)}(hTo prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.h]hTo prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhje4ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ cpupri_find_fitness (C function)c.cpupri_find_fitnesshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hint cpupri_find_fitness (struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu))h]h)}(hint cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu))h](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubj=)}(h h]h }(hj(5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhj'5hKubh)}(hcpupri_find_fitnessh]h)}(hcpupri_find_fitnessh]hcpupri_find_fitness}(hj:5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj65ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj'5hKubj )}(h{(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu))h](j&)}(hstruct cpupri *cph](j+)}(hj.h]hstruct}(hjV5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjR5ubj=)}(h h]h }(hjc5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR5ubh)}(hhh]h)}(hcpuprih]hcpupri}(hjt5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjv5modnameN classnameNjcjf)}ji]jl)}j_j<5sbc.cpupri_find_fitnessasbuh1hhjR5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR5ubh)}(hcph]hcp}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN5ubj&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubh)}(hhh]h)}(h task_structh]h task_struct}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]j5c.cpupri_find_fitnessasbuh1hhj5ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hjh]hp}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN5ubj&)}(hstruct cpumask *lowest_maskh](j+)}(hj.h]hstruct}(hj76hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj36ubj=)}(h h]h }(hjD6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj36ubh)}(hhh]h)}(hcpumaskh]hcpumask}(hjU6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjW6modnameN classnameNjcjf)}ji]j5c.cpupri_find_fitnessasbuh1hhj36ubj=)}(h h]h }(hjs6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj36ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj36ubh)}(h lowest_maskh]h lowest_mask}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj36ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN5ubj&)}(h2bool (*fitness_fn)(struct task_struct *p, int cpu)h](j)}(hjh]hbool}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubj)}(h(h]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(h fitness_fnh]h fitness_fn}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubj)}(hjh]h)}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hj6h]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj+)}(hj.h]hstruct}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj6ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubh)}(hhh]h)}(h task_structh]h task_struct}(hj#7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%7modnameN classnameNjcjf)}ji]j5c.cpupri_find_fitnessasbuh1hhj6ubj=)}(h h]h }(hjA7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubj)}(hjh]h*}(hjO7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hjh]hp}(hj\7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubj)}(h,h]h,}(hji7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj=)}(h h]h }(hjw7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubj)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubh)}(hcpuh]hcpu}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubj)}(hjh]h)}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN5ubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhj'5hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj'5hKubah}(h]j 5ah ](jjeh"]h$]h&]jj)jhuh1hhj'5hKhj5hhubj )}(hhh]j9)}(h,find the best (lowest-pri) CPU in the systemh]h,find the best (lowest-pri) CPU in the system}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj'5hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct cpupri *cp`` The cpupri context ``struct task_struct *p`` The task ``struct cpumask *lowest_mask`` A mask to fill in with selected CPUs (or NULL) ``bool (*fitness_fn)(struct task_struct *p, int cpu)`` A pointer to a function to do custom checks whether the CPU fits a specific criteria so that we only return those CPUs. **Note** This function returns the recommended CPUs as calculated during the current invocation. By the time the call returns, the CPUs may have in fact changed priorities any number of times. While not ideal, it is not an issue of correctness since the normal rebalancer logic will correct any discrepancies created by racing against the uncertainty of the current priority configuration. **Return** (int)bool - CPUs were foundh](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7ubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]j?)}(hj8h]hstruct cpupri *cp}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj)}(hhh]j9)}(hThe cpupri contexth]hThe cpupri context}(hj28hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.8hKhj/8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj.8hKhj8ubj)}(h#``struct task_struct *p`` The task h](j)}(h``struct task_struct *p``h]j?)}(hjR8h]hstruct task_struct *p}(hjT8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjP8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjL8ubj)}(hhh]j9)}(hThe taskh]hThe task}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjg8hKhjh8ubah}(h]h ]h"]h$]h&]uh1jhjL8ubeh}(h]h ]h"]h$]h&]uh1jhjg8hKhj8ubj)}(hO``struct cpumask *lowest_mask`` A mask to fill in with selected CPUs (or NULL) h](j)}(h``struct cpumask *lowest_mask``h]j?)}(hj8h]hstruct cpumask *lowest_mask}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj)}(hhh]j9)}(h.A mask to fill in with selected CPUs (or NULL)h]h.A mask to fill in with selected CPUs (or NULL)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhj8ubj)}(h``bool (*fitness_fn)(struct task_struct *p, int cpu)`` A pointer to a function to do custom checks whether the CPU fits a specific criteria so that we only return those CPUs. h](j)}(h6``bool (*fitness_fn)(struct task_struct *p, int cpu)``h]j?)}(hj8h]h2bool (*fitness_fn)(struct task_struct *p, int cpu)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj)}(hhh]j9)}(hwA pointer to a function to do custom checks whether the CPU fits a specific criteria so that we only return those CPUs.h]hwA pointer to a function to do custom checks whether the CPU fits a specific criteria so that we only return those CPUs.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhj8ubeh}(h]h ]h"]h$]h&]uh1jhj7ubj9)}(h**Note**h]jz)}(hj9h]hNote}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7ubj9)}(hX~This function returns the recommended CPUs as calculated during the current invocation. By the time the call returns, the CPUs may have in fact changed priorities any number of times. While not ideal, it is not an issue of correctness since the normal rebalancer logic will correct any discrepancies created by racing against the uncertainty of the current priority configuration.h]hX~This function returns the recommended CPUs as calculated during the current invocation. By the time the call returns, the CPUs may have in fact changed priorities any number of times. While not ideal, it is not an issue of correctness since the normal rebalancer logic will correct any discrepancies created by racing against the uncertainty of the current priority configuration.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7ubj9)}(h **Return**h]jz)}(hj'9h]hReturn}(hj)9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%9ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7ubj9)}(h(int)bool - CPUs were foundh]h(int)bool - CPUs were found}(hj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcpupri_set (C function) c.cpupri_sethNtauh1hhj$hhhNhNubh)}(hhh](h)}(h8void cpupri_set (struct cpupri *cp, int cpu, int newpri)h]h)}(h7void cpupri_set(struct cpupri *cp, int cpu, int newpri)h](j)}(hvoidh]hvoid}(hjl9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh9hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubj=)}(h h]h }(hj{9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjh9hhhjz9hKubh)}(h cpupri_seth]h)}(h cpupri_seth]h cpupri_set}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjh9hhhjz9hKubj )}(h((struct cpupri *cp, int cpu, int newpri)h](j&)}(hstruct cpupri *cph](j+)}(hj.h]hstruct}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9ubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubh)}(hhh]h)}(hcpuprih]hcpupri}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9modnameN classnameNjcjf)}ji]jl)}j_j9sb c.cpupri_setasbuh1hhj9ubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hcph]hcp}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubj&)}(hint cpuh](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj=)}(h h]h }(hj):hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubh)}(hcpuh]hcpu}(hj7:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubj&)}(h int newprih](j)}(hinth]hint}(hjP:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL:ubj=)}(h h]h }(hj^:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjL:ubh)}(hnewprih]hnewpri}(hjl:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubeh}(h]h ]h"]h$]h&]jj uh1jhjh9hhhjz9hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjd9hhhjz9hKubah}(h]j_9ah ](jjeh"]h$]h&]jj)jhuh1hhjz9hKhja9hhubj )}(hhh]j9)}(hupdate the CPU priority settingh]hupdate the CPU priority setting}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:hhubah}(h]h ]h"]h$]h&]uh1jhja9hhhjz9hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct cpupri *cp`` The cpupri context ``int cpu`` The target CPU ``int newpri`` The priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU **Note** Assumes cpu_rq(cpu)->lock is locked **Return** (void)h](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]j?)}(hj:h]hstruct cpupri *cp}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubj)}(hhh]j9)}(hThe cpupri contexth]hThe cpupri context}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hKhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hKhj:ubj)}(h``int cpu`` The target CPU h](j)}(h ``int cpu``h]j?)}(hj;h]hint cpu}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj ;ubj)}(hhh]j9)}(hThe target CPUh]hThe target CPU}(hj);hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%;hKhj&;ubah}(h]h ]h"]h$]h&]uh1jhj ;ubeh}(h]h ]h"]h$]h&]uh1jhj%;hKhj:ubj)}(hS``int newpri`` The priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU h](j)}(h``int newpri``h]j?)}(hjI;h]h int newpri}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjG;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhjC;ubj)}(hhh]j9)}(hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPUh]hCThe priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU}(hjb;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^;hKhj_;ubah}(h]h ]h"]h$]h&]uh1jhjC;ubeh}(h]h ]h"]h$]h&]uh1jhj^;hKhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h**Note**h]jz)}(hj;h]hNote}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubj9)}(h#Assumes cpu_rq(cpu)->lock is lockedh]h#Assumes cpu_rq(cpu)->lock is locked}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubj9)}(h **Return**h]jz)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubj9)}(h(void)h]h(void)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcpupri_init (C function) c.cpupri_inithNtauh1hhj$hhhNhNubh)}(hhh](h)}(h#int cpupri_init (struct cpupri *cp)h]h)}(h"int cpupri_init(struct cpupri *cp)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;hhhj;hMubh)}(h cpupri_inith]h)}(h cpupri_inith]h cpupri_init}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj <ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhj;hMubj )}(h(struct cpupri *cp)h]j&)}(hstruct cpupri *cph](j+)}(hj.h]hstruct}(hj-<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)<ubj=)}(h h]h }(hj:<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)<ubh)}(hhh]h)}(hcpuprih]hcpupri}(hjK<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjH<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjM<modnameN classnameNjcjf)}ji]jl)}j_j<sb c.cpupri_initasbuh1hhj)<ubj=)}(h h]h }(hjk<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)<ubj)}(hjh]h*}(hjy<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)<ubh)}(hcph]hcp}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%<ubah}(h]h ]h"]h$]h&]jj uh1jhj;hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;hhhj;hMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj;hhubj )}(hhh]j9)}(hinitialize the cpupri structureh]hinitialize the cpupri structure}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj$hNhNubjp)}(hm**Parameters** ``struct cpupri *cp`` The cpupri context **Return** -ENOMEM on memory allocation failure.h](j9)}(h**Parameters**h]jz)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<ubj)}(hhh]j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]j?)}(hj<h]hstruct cpupri *cp}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<ubj)}(hhh]j9)}(hThe cpupri contexth]hThe cpupri context}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h **Return**h]jz)}(hj,=h]hReturn}(hj.=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*=ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<ubj9)}(h%-ENOMEM on memory allocation failure.h]h%-ENOMEM on memory allocation failure.}(hjB=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcpupri_cleanup (C function)c.cpupri_cleanuphNtauh1hhj$hhhNhNubh)}(hhh](h)}(h'void cpupri_cleanup (struct cpupri *cp)h]h)}(h&void cpupri_cleanup(struct cpupri *cp)h](j)}(hvoidh]hvoid}(hjq=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm=hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjm=hhhj=hM3ubh)}(hcpupri_cleanuph]h)}(hcpupri_cleanuph]hcpupri_cleanup}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjm=hhhj=hM3ubj )}(h(struct cpupri *cp)h]j&)}(hstruct cpupri *cph](j+)}(hj.h]hstruct}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj=ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubh)}(hhh]h)}(hcpuprih]hcpupri}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj=modnameN classnameNjcjf)}ji]jl)}j_j=sbc.cpupri_cleanupasbuh1hhj=ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hcph]hcp}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubah}(h]h ]h"]h$]h&]jj uh1jhjm=hhhj=hM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhji=hhhj=hM3ubah}(h]jd=ah ](jjeh"]h$]h&]jj)jhuh1hhj=hM3hjf=hhubj )}(hhh]j9)}(hclean up the cpupri structureh]hclean up the cpupri structure}(hj1>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3hj.>hhubah}(h]h ]h"]h$]h&]uh1jhjf=hhhj=hM3ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jI>j4jI>j5j6j7uh1hhhhj$hNhNubjp)}(h:**Parameters** ``struct cpupri *cp`` The cpupri contexth](j9)}(h**Parameters**h]jz)}(hjS>h]h Parameters}(hjU>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ>ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM7hjM>ubj)}(hhh]j)}(h(``struct cpupri *cp`` The cpupri contexth](j)}(h``struct cpupri *cp``h]j?)}(hjr>h]hstruct cpupri *cp}(hjt>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjp>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM9hjl>ubj)}(hhh]j9)}(hThe cpupri contexth]hThe cpupri context}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM4hj>ubah}(h]h ]h"]h$]h&]uh1jhjl>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM9hji>ubah}(h]h ]h"]h$]h&]uh1jhjM>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌupdate_tg_load_avg (C function)c.update_tg_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(h/void update_tg_load_avg (struct cfs_rq *cfs_rq)h]h)}(h.void update_tg_load_avg(struct cfs_rq *cfs_rq)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM3ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhj>hM3ubh)}(hupdate_tg_load_avgh]h)}(hupdate_tg_load_avgh]hupdate_tg_load_avg}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj>hM3ubj )}(h(struct cfs_rq *cfs_rq)h]j&)}(hstruct cfs_rq *cfs_rqh](j+)}(hj.h]hstruct}(hj ?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj?ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hj'?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)?modnameN classnameNjcjf)}ji]jl)}j_j>sbc.update_tg_load_avgasbuh1hhj?ubj=)}(h h]h }(hjG?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubj)}(hjh]h*}(hjU?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hcfs_rqh]hcfs_rq}(hjb?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?ubah}(h]h ]h"]h$]h&]jj uh1jhj>hhhj>hM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj>hM3ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj>hM3hj>hhubj )}(hhh]j9)}(hupdate the tg's load avgh]hupdate the tg’s load avg}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM3hj?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hM3ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct cfs_rq *cfs_rq`` the cfs_rq whose avg changed **Description** This function 'ensures': tg->load_avg := \Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations. In order to avoid having to look at the other cfs_rq's, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is 'small'. Updating tg's load_avg is necessary before update_cfs_share().h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM7hj?ubj)}(hhh]j)}(h7``struct cfs_rq *cfs_rq`` the cfs_rq whose avg changed h](j)}(h``struct cfs_rq *cfs_rq``h]j?)}(hj?h]hstruct cfs_rq *cfs_rq}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM4hj?ubj)}(hhh]j9)}(hthe cfs_rq whose avg changedh]hthe cfs_rq whose avg changed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hM4hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM4hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hj@h]h Description}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM6hj?ubj9)}(hThis function 'ensures': tg->load_avg := \Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations.h]hThis function ‘ensures’: tg->load_avg := Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM5hj?ubj9)}(hIn order to avoid having to look at the other cfs_rq's, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is 'small'.h]hIn order to avoid having to look at the other cfs_rq’s, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is ‘small’.}(hj-@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM9hj?ubj9)}(h>Updating tg's load_avg is necessary before update_cfs_share().h]h@Updating tg’s load_avg is necessary before update_cfs_share().}(hj<@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM=hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#update_cfs_rq_load_avg (C function)c.update_cfs_rq_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(h;int update_cfs_rq_load_avg (u64 now, struct cfs_rq *cfs_rq)h]h)}(h:int update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)h](j)}(hinth]hint}(hjk@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg@hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubj=)}(h h]h }(hjz@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjg@hhhjy@hMubh)}(hupdate_cfs_rq_load_avgh]h)}(hupdate_cfs_rq_load_avgh]hupdate_cfs_rq_load_avg}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjg@hhhjy@hMubj )}(h (u64 now, struct cfs_rq *cfs_rq)h](j&)}(hu64 nowh](h)}(hhh]h)}(hu64h]hu64}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj@modnameN classnameNjcjf)}ji]jl)}j_j@sbc.update_cfs_rq_load_avgasbuh1hhj@ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hnowh]hnow}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj@ubj&)}(hstruct cfs_rq *cfs_rqh](j+)}(hj.h]hstruct}(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Aubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjAmodnameN classnameNjcjf)}ji]j@c.update_cfs_rq_load_avgasbuh1hhj@ubj=)}(h h]h }(hj.AhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubj)}(hjh]h*}(hjavg is used for task_h_load() and update_cfs_share() for example. Since both these conditions indicate a changed cfs_rq->avg.load we should call update_tg_load_avg() when this function returns true. **Return** true if the load decayed or we removed load.h](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh](j)}(h5``u64 now`` current time, as per cfs_rq_clock_pelt() h](j)}(h ``u64 now``h]j?)}(hjAh]hu64 now}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh]j9)}(h(current time, as per cfs_rq_clock_pelt()h]h(current time, as per cfs_rq_clock_pelt()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h+``struct cfs_rq *cfs_rq`` cfs_rq to update h](j)}(h``struct cfs_rq *cfs_rq``h]j?)}(hjAh]hstruct cfs_rq *cfs_rq}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh]j9)}(hcfs_rq to updateh]hcfs_rq to update}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hj(Bh]h Description}(hj*BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Bubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj9)}(hThe cfs_rq avg is the direct sum of all its entities (blocked and runnable) avg. The immediate corollary is that all (fair) tasks must be attached.h]hThe cfs_rq avg is the direct sum of all its entities (blocked and runnable) avg. The immediate corollary is that all (fair) tasks must be attached.}(hj>BhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj9)}(hIcfs_rq->avg is used for task_h_load() and update_cfs_share() for example.h]hIcfs_rq->avg is used for task_h_load() and update_cfs_share() for example.}(hjMBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjAubj9)}(hSince both these conditions indicate a changed cfs_rq->avg.load we should call update_tg_load_avg() when this function returns true.h]hSince both these conditions indicate a changed cfs_rq->avg.load we should call update_tg_load_avg() when this function returns true.}(hj\BhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjAubj9)}(h **Return**h]jz)}(hjmBh]hReturn}(hjoBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkBubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj9)}(h,true if the load decayed or we removed load.h]h,true if the load decayed or we removed load.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#attach_entity_load_avg (C function)c.attach_entity_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(hLvoid attach_entity_load_avg (struct cfs_rq *cfs_rq, struct sched_entity *se)h]h)}(hKvoid attach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>ubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBhhhjBhM>ubh)}(hattach_entity_load_avgh]h)}(hattach_entity_load_avgh]hattach_entity_load_avg}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjBhM>ubj )}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j&)}(hstruct cfs_rq *cfs_rqh](j+)}(hj.h]hstruct}(hjBhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjBubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hj ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Cubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_jBsbc.attach_entity_load_avgasbuh1hhjBubj=)}(h h]h }(hj-ChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubj)}(hjh]h*}(hj;ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hcfs_rqh]hcfs_rq}(hjHChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubj&)}(hstruct sched_entity *seh](j+)}(hj.h]hstruct}(hjaChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj]Cubj=)}(h h]h }(hjnChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]Cubh)}(hhh]h)}(h sched_entityh]h sched_entity}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|Cubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]j)Cc.attach_entity_load_avgasbuh1hhj]Cubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]Cubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Cubh)}(hseh]hse}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Cubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubeh}(h]h ]h"]h$]h&]jj uh1jhjBhhhjBhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjBhM>ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhjBhM>hjBhhubj )}(hhh]j9)}(h)attach this entity to its cfs_rq load avgh]h)attach this entity to its cfs_rq load avg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>hjChhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct cfs_rq *cfs_rq`` cfs_rq to attach to ``struct sched_entity *se`` sched_entity to attach **Description** Must call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.h](j9)}(h**Parameters**h]jz)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMBhjCubj)}(hhh](j)}(h.``struct cfs_rq *cfs_rq`` cfs_rq to attach to h](j)}(h``struct cfs_rq *cfs_rq``h]j?)}(hj#Dh]hstruct cfs_rq *cfs_rq}(hj%DhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!Dubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM?hjDubj)}(hhh]j9)}(hcfs_rq to attach toh]hcfs_rq to attach to}(hjhjZDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM@hjVDubj)}(hhh]j9)}(hsched_entity to attachh]hsched_entity to attach}(hjuDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqDhM@hjrDubah}(h]h ]h"]h$]h&]uh1jhjVDubeh}(h]h ]h"]h$]h&]uh1jhjqDhM@hjDubeh}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMBhjCubj9)}(hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.h]hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMAhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#detach_entity_load_avg (C function)c.detach_entity_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(hLvoid detach_entity_load_avg (struct cfs_rq *cfs_rq, struct sched_entity *se)h]h)}(hKvoid detach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMuubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDhhhjDhMuubh)}(hdetach_entity_load_avgh]h)}(hdetach_entity_load_avgh]hdetach_entity_load_avg}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjDhMuubj )}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j&)}(hstruct cfs_rq *cfs_rqh](j+)}(hj.h]hstruct}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj=)}(h h]h }(hj&EhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubh)}(hhh]h)}(hcfs_rqh]hcfs_rq}(hj7EhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4Eubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9EmodnameN classnameNjcjf)}ji]jl)}j_jDsbc.detach_entity_load_avgasbuh1hhjEubj=)}(h h]h }(hjWEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubj)}(hjh]h*}(hjeEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hcfs_rqh]hcfs_rq}(hjrEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubj&)}(hstruct sched_entity *seh](j+)}(hj.h]hstruct}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubh)}(hhh]h)}(h sched_entityh]h sched_entity}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jSEc.detach_entity_load_avgasbuh1hhjEubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hseh]hse}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubeh}(h]h ]h"]h$]h&]jj uh1jhjDhhhjDhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjDhMuubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhjDhMuhjDhhubj )}(hhh]j9)}(h+detach this entity from its cfs_rq load avgh]h+detach this entity from its cfs_rq load avg}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMuhj Fhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$Fj4j$Fj5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct cfs_rq *cfs_rq`` cfs_rq to detach from ``struct sched_entity *se`` sched_entity to detach **Description** Must call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.h](j9)}(h**Parameters**h]jz)}(hj.Fh]h Parameters}(hj0FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Fubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMyhj(Fubj)}(hhh](j)}(h0``struct cfs_rq *cfs_rq`` cfs_rq to detach from h](j)}(h``struct cfs_rq *cfs_rq``h]j?)}(hjMFh]hstruct cfs_rq *cfs_rq}(hjOFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMvhjGFubj)}(hhh]j9)}(hcfs_rq to detach fromh]hcfs_rq to detach from}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbFhMvhjcFubah}(h]h ]h"]h$]h&]uh1jhjGFubeh}(h]h ]h"]h$]h&]uh1jhjbFhMvhjDFubj)}(h3``struct sched_entity *se`` sched_entity to detach h](j)}(h``struct sched_entity *se``h]j?)}(hjFh]hstruct sched_entity *se}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMwhjFubj)}(hhh]j9)}(hsched_entity to detachh]hsched_entity to detach}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMwhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMwhjDFubeh}(h]h ]h"]h$]h&]uh1jhj(Fubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMyhj(Fubj9)}(hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.h]hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMxhj(Fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcpu_util (C function) c.cpu_utilhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hOunsigned long cpu_util (int cpu, struct task_struct *p, int dst_cpu, int boost)h]h)}(hNunsigned long cpu_util(int cpu, struct task_struct *p, int dst_cpu, int boost)h](j)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM ubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGhhhjGhM ubj)}(hlongh]hlong}(hj#GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhM ubj=)}(h h]h }(hj1GhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGhhhjGhM ubh)}(hcpu_utilh]h)}(hcpu_utilh]hcpu_util}(hjCGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?Gubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjGhM ubj )}(h8(int cpu, struct task_struct *p, int dst_cpu, int boost)h](j&)}(hint cpuh](j)}(hinth]hint}(hj_GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Gubj=)}(h h]h }(hjmGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[Gubh)}(hcpuh]hcpu}(hj{GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[Gubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWGubj&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hjGhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjGubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGubh)}(hhh]h)}(h task_structh]h task_struct}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]jl)}j_jEGsb c.cpu_utilasbuh1hhjGubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hjh]hp}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWGubj&)}(h int dst_cpuh](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubh)}(hdst_cpuh]hdst_cpu}(hj!HhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWGubj&)}(h int boosth](j)}(hinth]hint}(hj:HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Hubj=)}(h h]h }(hjHHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6Hubh)}(hboosth]hboost}(hjVHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Hubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWGubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjGhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjGhM ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjGhM hjFhhubj )}(hhh]j9)}(h7Estimates the amount of CPU capacity used by CFS tasks.h]h7Estimates the amount of CPU capacity used by CFS tasks.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hj}Hhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjGhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jHj4jHj5j6j7uh1hhhhj$hNhNubjp)}(hX`**Parameters** ``int cpu`` the CPU to get the utilization for ``struct task_struct *p`` task for which the CPU utilization should be predicted or NULL ``int dst_cpu`` CPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULL ``int boost`` 1 to enable boosting, otherwise 0 **Description** The unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity. CPU utilization is the sum of running time of runnable tasks plus the recent utilization of currently non-runnable tasks on that CPU. It represents the amount of CPU capacity currently used by CFS tasks in the range [0..max CPU capacity] with max CPU capacity being the CPU capacity at f_max. The estimated CPU utilization is defined as the maximum between CPU utilization and sum of the estimated utilization of the currently runnable tasks on that CPU. It preserves a utilization "snapshot" of previously-executed tasks, which helps better deduce how busy a CPU will be when a long-sleeping task wakes up. The contribution to CPU utilization of such a task would be significantly decayed at this point of time. Boosted CPU utilization is defined as max(CPU runnable, CPU utilization). CPU contention for CFS tasks can be detected by CPU runnable > CPU utilization. Boosting is implemented in cpu_util() so that internal users (e.g. EAS) can use it next to external users (e.g. schedutil), latter via cpu_util_cfs_boost(). CPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS). **Return** (Boosted) (estimated) utilization for the specified CPU.h](j9)}(h**Parameters**h]jz)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$hjHubj)}(hhh](j)}(h/``int cpu`` the CPU to get the utilization for h](j)}(h ``int cpu``h]j?)}(hjHh]hint cpu}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM!hjHubj)}(hhh]j9)}(h"the CPU to get the utilization forh]h"the CPU to get the utilization for}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhM!hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM!hjHubj)}(hY``struct task_struct *p`` task for which the CPU utilization should be predicted or NULL h](j)}(h``struct task_struct *p``h]j?)}(hjHh]hstruct task_struct *p}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"hjHubj)}(hhh]j9)}(h>task for which the CPU utilization should be predicted or NULLh]h>task for which the CPU utilization should be predicted or NULL}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhM"hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhM"hjHubj)}(hW``int dst_cpu`` CPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULL h](j)}(h``int dst_cpu``h]j?)}(hj3Ih]h int dst_cpu}(hj5IhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1Iubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#hj-Iubj)}(hhh]j9)}(hFCPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULLh](hCPU }(hjLIhhhNhNubjz)}(h**p**h]hp}(hjTIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLIubh migrates to, -1 if }(hjLIhhhNhNubjz)}(h**p**h]hp}(hjfIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLIubh moves from }(hjLIhhhNhNubjz)}(h**cpu**h]hcpu}(hjxIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLIubh or }(hjLIhhhNhNubjz)}(h**p**h]hp}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLIubh == NULL}(hjLIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjHIhM#hjIIubah}(h]h ]h"]h$]h&]uh1jhj-Iubeh}(h]h ]h"]h$]h&]uh1jhjHIhM#hjHubj)}(h0``int boost`` 1 to enable boosting, otherwise 0 h](j)}(h ``int boost``h]j?)}(hjIh]h int boost}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$hjIubj)}(hhh]j9)}(h!1 to enable boosting, otherwise 0h]h!1 to enable boosting, otherwise 0}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhM$hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM$hjHubeh}(h]h ]h"]h$]h&]uh1jhjHubj9)}(h**Description**h]jz)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&hjHubj9)}(hThe unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity.h]hThe unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM%hjHubj9)}(hX$CPU utilization is the sum of running time of runnable tasks plus the recent utilization of currently non-runnable tasks on that CPU. It represents the amount of CPU capacity currently used by CFS tasks in the range [0..max CPU capacity] with max CPU capacity being the CPU capacity at f_max.h]hX$CPU utilization is the sum of running time of runnable tasks plus the recent utilization of currently non-runnable tasks on that CPU. It represents the amount of CPU capacity currently used by CFS tasks in the range [0..max CPU capacity] with max CPU capacity being the CPU capacity at f_max.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjHubj9)}(hXThe estimated CPU utilization is defined as the maximum between CPU utilization and sum of the estimated utilization of the currently runnable tasks on that CPU. It preserves a utilization "snapshot" of previously-executed tasks, which helps better deduce how busy a CPU will be when a long-sleeping task wakes up. The contribution to CPU utilization of such a task would be significantly decayed at this point of time.h]hXThe estimated CPU utilization is defined as the maximum between CPU utilization and sum of the estimated utilization of the currently runnable tasks on that CPU. It preserves a utilization “snapshot” of previously-executed tasks, which helps better deduce how busy a CPU will be when a long-sleeping task wakes up. The contribution to CPU utilization of such a task would be significantly decayed at this point of time.}(hj#JhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM.hjHubj9)}(hX6Boosted CPU utilization is defined as max(CPU runnable, CPU utilization). CPU contention for CFS tasks can be detected by CPU runnable > CPU utilization. Boosting is implemented in cpu_util() so that internal users (e.g. EAS) can use it next to external users (e.g. schedutil), latter via cpu_util_cfs_boost().h]hX6Boosted CPU utilization is defined as max(CPU runnable, CPU utilization). CPU contention for CFS tasks can be detected by CPU runnable > CPU utilization. Boosting is implemented in cpu_util() so that internal users (e.g. EAS) can use it next to external users (e.g. schedutil), latter via cpu_util_cfs_boost().}(hj2JhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM5hjHubj9)}(hXVCPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS).h]hXVCPU utilization can be higher than the current CPU capacity (f_curr/f_max * max CPU capacity) or even the max CPU capacity because of rounding errors as well as task migrations or wakeups of new tasks. CPU utilization has to be capped to fit into the [0..max CPU capacity] range. Otherwise a group of CPUs (CPU0 util = 121% + CPU1 util = 80%) could be seen as over-utilized even though CPU1 has 20% of spare CPU capacity. CPU utilization is allowed to overshoot current CPU capacity though since this is useful for predicting the CPU capacity required after task migrations (scheduler-driven DVFS).}(hjAJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM;hjHubj9)}(h **Return**h]jz)}(hjRJh]hReturn}(hjTJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPJubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMEhjHubj9)}(h8(Boosted) (estimated) utilization for the specified CPU.h]h8(Boosted) (estimated) utilization for the specified CPU.}(hjhJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMFhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sched_use_asym_prio (C function)c.sched_use_asym_priohNtauh1hhj$hhhNhNubh)}(hhh](h)}(h;bool sched_use_asym_prio (struct sched_domain *sd, int cpu)h]h)}(h:bool sched_use_asym_prio(struct sched_domain *sd, int cpu)h](j)}(hjh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMS(ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJhhhjJhMS(ubh)}(hsched_use_asym_prioh]h)}(hsched_use_asym_prioh]hsched_use_asym_prio}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjJhMS(ubj )}(h"(struct sched_domain *sd, int cpu)h](j&)}(hstruct sched_domain *sdh](j+)}(hj.h]hstruct}(hjJhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjJubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJubh)}(hhh]h)}(h sched_domainh]h sched_domain}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jl)}j_jJsbc.sched_use_asym_prioasbuh1hhjJubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hsdh]hsd}(hj,KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJubj&)}(hint cpuh](j)}(hinth]hint}(hjEKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAKubj=)}(h h]h }(hjSKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAKubh)}(hcpuh]hcpu}(hjaKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJubeh}(h]h ]h"]h$]h&]jj uh1jhjJhhhjJhMS(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjJhMS(ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjJhMS(hjJhhubj )}(hhh]j9)}(h0Check whether asym_packing priority must be usedh]h0Check whether asym_packing priority must be used}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMS(hjKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMS(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct sched_domain *sd`` The scheduling domain of the load balancing ``int cpu`` A CPU **Description** Always use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that **cpu** is idle. Only use CPU priority if the whole core is idle. **Return** True if the priority of **cpu** must be followed. False otherwise.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMW(hjKubj)}(hhh](j)}(hH``struct sched_domain *sd`` The scheduling domain of the load balancing h](j)}(h``struct sched_domain *sd``h]j?)}(hjKh]hstruct sched_domain *sd}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMT(hjKubj)}(hhh]j9)}(h+The scheduling domain of the load balancingh]h+The scheduling domain of the load balancing}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMT(hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMT(hjKubj)}(h``int cpu`` A CPU h](j)}(h ``int cpu``h]j?)}(hjLh]hint cpu}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMU(hjKubj)}(hhh]j9)}(hA CPUh]hA CPU}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMU(hjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjLhMU(hjKubeh}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hj@Lh]h Description}(hjBLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>Lubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMW(hjKubj9)}(hAlways use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that **cpu** is idle. Only use CPU priority if the whole core is idle.h](hAlways use CPU priority when balancing load between SMT siblings. When balancing load between cores, it is not sufficient that }(hjVLhhhNhNubjz)}(h**cpu**h]hcpu}(hj^LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVLubh: is idle. Only use CPU priority if the whole core is idle.}(hjVLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMV(hjKubj9)}(h **Return**h]jz)}(hjyLh]hReturn}(hj{LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwLubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMZ(hjKubj9)}(hBTrue if the priority of **cpu** must be followed. False otherwise.h](hTrue if the priority of }(hjLhhhNhNubjz)}(h**cpu**h]hcpu}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh# must be followed. False otherwise.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM[(hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsched_group_asym (C function)c.sched_group_asymhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h^bool sched_group_asym (struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h]h)}(h]bool sched_group_asym(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j)}(hjh]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMs(ubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLhhhjLhMs(ubh)}(hsched_group_asymh]h)}(hsched_group_asymh]hsched_group_asym}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhjLhMs(ubj )}(hH(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hj MhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hhh]h)}(hlb_envh]hlb_env}(hj*MhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'Mubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,MmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.sched_group_asymasbuh1hhjMubj=)}(h h]h }(hjJMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hjh]h*}(hjXMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(henvh]henv}(hjeMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubj&)}(hstruct sg_lb_stats *sgsh](j+)}(hj.h]hstruct}(hj~MhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjzMubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzMubh)}(hhh]h)}(h sg_lb_statsh]h sg_lb_stats}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jFMc.sched_group_asymasbuh1hhjzMubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzMubh)}(hsgsh]hsgs}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubj&)}(hstruct sched_group *grouph](j+)}(hj.h]hstruct}(hjMhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hhh]h)}(h sched_grouph]h sched_group}(hj NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Nubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNmodnameN classnameNjcjf)}ji]jFMc.sched_group_asymasbuh1hhjMubj=)}(h h]h }(hj*NhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hjh]h*}(hj8NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hgrouph]hgroup}(hjENhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubeh}(h]h ]h"]h$]h&]jj uh1jhjLhhhjLhMs(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjLhMs(ubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1hhjLhMs(hjLhhubj )}(hhh]j9)}(h8Check if the destination CPU can do asym_packing balanceh]h8Check if the destination CPU can do asym_packing balance}(hjoNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMs(hjlNhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhMs(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct lb_env *env`` The load balancing environment ``struct sg_lb_stats *sgs`` Load-balancing statistics of the candidate busiest group ``struct sched_group *group`` The candidate busiest group **Description** **env**::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of **group**. **Return** true if **env**::dst_cpu can do with asym_packing load balance. False otherwise.h](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMw(hjNubj)}(hhh](j)}(h6``struct lb_env *env`` The load balancing environment h](j)}(h``struct lb_env *env``h]j?)}(hjNh]hstruct lb_env *env}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMt(hjNubj)}(hhh]j9)}(hThe load balancing environmenth]hThe load balancing environment}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMt(hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMt(hjNubj)}(hU``struct sg_lb_stats *sgs`` Load-balancing statistics of the candidate busiest group h](j)}(h``struct sg_lb_stats *sgs``h]j?)}(hjNh]hstruct sg_lb_stats *sgs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMu(hjNubj)}(hhh]j9)}(h8Load-balancing statistics of the candidate busiest grouph]h8Load-balancing statistics of the candidate busiest group}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMu(hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMu(hjNubj)}(h:``struct sched_group *group`` The candidate busiest group h](j)}(h``struct sched_group *group``h]j?)}(hj"Oh]hstruct sched_group *group}(hj$OhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Oubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMv(hjOubj)}(hhh]j9)}(hThe candidate busiest grouph]hThe candidate busiest group}(hj;OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7OhMv(hj8Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj7OhMv(hjNubeh}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hj]Oh]h Description}(hj_OhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[Oubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMx(hjNubj9)}(hc**env**::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of **group**.h](jz)}(h**env**h]henv}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsOubhR::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of }(hjsOhhhNhNubjz)}(h **group**h]hgroup}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsOubh.}(hjsOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMw(hjNubj9)}(h **Return**h]jz)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMz(hjNubj9)}(hPtrue if **env**::dst_cpu can do with asym_packing load balance. False otherwise.h](htrue if }(hjOhhhNhNubjz)}(h**env**h]henv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubhA::dst_cpu can do with asym_packing load balance. False otherwise.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM{(hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌupdate_sg_lb_stats (C function)c.update_sg_lb_statshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hvoid update_sg_lb_stats (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded, bool *sg_overutilized)h]h)}(hvoid update_sg_lb_stats(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded, bool *sg_overutilized)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(ubj=)}(h h]h }(hj PhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOhhhj PhM(ubh)}(hupdate_sg_lb_statsh]h)}(hupdate_sg_lb_statsh]hupdate_sg_lb_stats}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhj PhM(ubj )}(h(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded, bool *sg_overutilized)h](j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hj8PhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj4Pubj=)}(h h]h }(hjEPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4Pubh)}(hhh]h)}(hlb_envh]hlb_env}(hjVPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjXPmodnameN classnameNjcjf)}ji]jl)}j_jPsbc.update_sg_lb_statsasbuh1hhj4Pubj=)}(h h]h }(hjvPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4Pubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Pubh)}(henvh]henv}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4Pubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubj&)}(hstruct sd_lb_stats *sdsh](j+)}(hj.h]hstruct}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjPubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubh)}(hhh]h)}(h sd_lb_statsh]h sd_lb_stats}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPmodnameN classnameNjcjf)}ji]jrPc.update_sg_lb_statsasbuh1hhjPubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hsdsh]hsds}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubj&)}(hstruct sched_group *grouph](j+)}(hj.h]hstruct}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj=)}(h h]h }(hj'QhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh)}(hhh]h)}(h sched_grouph]h sched_group}(hj8QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Qubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:QmodnameN classnameNjcjf)}ji]jrPc.update_sg_lb_statsasbuh1hhjQubj=)}(h h]h }(hjVQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjdQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hgrouph]hgroup}(hjqQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubj&)}(hstruct sg_lb_stats *sgsh](j+)}(hj.h]hstruct}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh)}(hhh]h)}(h sg_lb_statsh]h sg_lb_stats}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jrPc.update_sg_lb_statsasbuh1hhjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hsgsh]hsgs}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubj&)}(hbool *sg_overloadedh](j)}(hjh]hbool}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(h sg_overloadedh]h sg_overloaded}(hj"RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubj&)}(hbool *sg_overutilizedh](j)}(hjh]hbool}(hj;RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Rubj=)}(h h]h }(hjHRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7Rubj)}(hjh]h*}(hjVRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Rubh)}(hsg_overutilizedh]hsg_overutilized}(hjcRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7Rubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0Pubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhj PhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhj PhM(ubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1hhj PhM(hjOhhubj )}(hhh]j9)}(h3Update sched_group's statistics for load balancing.h]h5Update sched_group’s statistics for load balancing.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjRhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhj PhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct lb_env *env`` The load balancing environment. ``struct sd_lb_stats *sds`` Load-balancing data with statistics of the local group. ``struct sched_group *group`` sched_group whose statistics are to be updated. ``struct sg_lb_stats *sgs`` variable to hold the statistics for this group. ``bool *sg_overloaded`` sched_group is overloaded ``bool *sg_overutilized`` sched_group is overutilizedh](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjRubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]j?)}(hjRh]hstruct lb_env *env}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjRubj)}(hhh]j9)}(hThe load balancing environment.h]hThe load balancing environment.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhM(hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM(hjRubj)}(hT``struct sd_lb_stats *sds`` Load-balancing data with statistics of the local group. h](j)}(h``struct sd_lb_stats *sds``h]j?)}(hjSh]hstruct sd_lb_stats *sds}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjSubj)}(hhh]j9)}(h7Load-balancing data with statistics of the local group.h]h7Load-balancing data with statistics of the local group.}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShM(hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM(hjRubj)}(hN``struct sched_group *group`` sched_group whose statistics are to be updated. h](j)}(h``struct sched_group *group``h]j?)}(hj@Sh]hstruct sched_group *group}(hjBShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>Subah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hj:Subj)}(hhh]j9)}(h/sched_group whose statistics are to be updated.h]h/sched_group whose statistics are to be updated.}(hjYShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUShM(hjVSubah}(h]h ]h"]h$]h&]uh1jhj:Subeh}(h]h ]h"]h$]h&]uh1jhjUShM(hjRubj)}(hL``struct sg_lb_stats *sgs`` variable to hold the statistics for this group. h](j)}(h``struct sg_lb_stats *sgs``h]j?)}(hjySh]hstruct sg_lb_stats *sgs}(hj{ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjsSubj)}(hhh]j9)}(h/variable to hold the statistics for this group.h]h/variable to hold the statistics for this group.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShM(hjSubah}(h]h ]h"]h$]h&]uh1jhjsSubeh}(h]h ]h"]h$]h&]uh1jhjShM(hjRubj)}(h2``bool *sg_overloaded`` sched_group is overloaded h](j)}(h``bool *sg_overloaded``h]j?)}(hjSh]hbool *sg_overloaded}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjSubj)}(hhh]j9)}(hsched_group is overloadedh]hsched_group is overloaded}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShM(hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM(hjRubj)}(h5``bool *sg_overutilized`` sched_group is overutilizedh](j)}(h``bool *sg_overutilized``h]j?)}(hjSh]hbool *sg_overutilized}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjSubj)}(hhh]j9)}(hsched_group is overutilizedh]hsched_group is overutilized}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(hjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThM(hjRubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#update_sd_pick_busiest (C function)c.update_sd_pick_busiesthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hzbool update_sd_pick_busiest (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h]h)}(hybool update_sd_pick_busiest(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h](j)}(hjh]hbool}(hjEThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAThhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM:)ubj=)}(h h]h }(hjSThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAThhhjRThM:)ubh)}(hupdate_sd_pick_busiesth]h)}(hupdate_sd_pick_busiesth]hupdate_sd_pick_busiest}(hjeThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAThhhjRThM:)ubj )}(h^(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h](j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hjThhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj}Tubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}Tubh)}(hhh]h)}(hlb_envh]hlb_env}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTmodnameN classnameNjcjf)}ji]jl)}j_jgTsbc.update_sd_pick_busiestasbuh1hhj}Tubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}Tubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Tubh)}(henvh]henv}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}Tubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyTubj&)}(hstruct sd_lb_stats *sdsh](j+)}(hj.h]hstruct}(hjThhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjTubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubh)}(hhh]h)}(h sd_lb_statsh]h sd_lb_stats}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jTc.update_sd_pick_busiestasbuh1hhjTubj=)}(h h]h }(hj/UhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubj)}(hjh]h*}(hj=UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hsdsh]hsds}(hjJUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyTubj&)}(hstruct sched_group *sgh](j+)}(hj.h]hstruct}(hjcUhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_Uubj=)}(h h]h }(hjpUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_Uubh)}(hhh]h)}(h sched_grouph]h sched_group}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Uubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jTc.update_sd_pick_busiestasbuh1hhj_Uubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_Uubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Uubh)}(hsgh]hsg}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_Uubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyTubj&)}(hstruct sg_lb_stats *sgsh](j+)}(hj.h]hstruct}(hjUhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hhh]h)}(h sg_lb_statsh]h sg_lb_stats}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jTc.update_sd_pick_busiestasbuh1hhjUubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hsgsh]hsgs}(hj*VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyTubeh}(h]h ]h"]h$]h&]jj uh1jhjAThhhjRThM:)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=ThhhjRThM:)ubah}(h]j8Tah ](jjeh"]h$]h&]jj)jhuh1hhjRThM:)hj:Thhubj )}(hhh]j9)}(hreturn 1 on busiest grouph]hreturn 1 on busiest group}(hjTVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM:)hjQVhhubah}(h]h ]h"]h$]h&]uh1jhj:ThhhjRThM:)ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlVj4jlVj5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct lb_env *env`` The load balancing environment. ``struct sd_lb_stats *sds`` sched_domain statistics ``struct sched_group *sg`` sched_group candidate to be checked for being the busiest ``struct sg_lb_stats *sgs`` sched_group statistics **Description** Determine if **sg** is a busier group than the previously selected busiest group. **Return** ``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjvVh]h Parameters}(hjxVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtVubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>)hjpVubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]j?)}(hjVh]hstruct lb_env *env}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM;)hjVubj)}(hhh]j9)}(hThe load balancing environment.h]hThe load balancing environment.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM;)hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM;)hjVubj)}(h4``struct sd_lb_stats *sds`` sched_domain statistics h](j)}(h``struct sd_lb_stats *sds``h]j?)}(hjVh]hstruct sd_lb_stats *sds}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM<)hjVubj)}(hhh]j9)}(hsched_domain statisticsh]hsched_domain statistics}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM<)hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM<)hjVubj)}(hU``struct sched_group *sg`` sched_group candidate to be checked for being the busiest h](j)}(h``struct sched_group *sg``h]j?)}(hjWh]hstruct sched_group *sg}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM=)hjWubj)}(hhh]j9)}(h9sched_group candidate to be checked for being the busiesth]h9sched_group candidate to be checked for being the busiest}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM=)hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM=)hjVubj)}(h3``struct sg_lb_stats *sgs`` sched_group statistics h](j)}(h``struct sg_lb_stats *sgs``h]j?)}(hj@Wh]hstruct sg_lb_stats *sgs}(hjBWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>Wubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>)hj:Wubj)}(hhh]j9)}(hsched_group statisticsh]hsched_group statistics}(hjYWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUWhM>)hjVWubah}(h]h ]h"]h$]h&]uh1jhj:Wubeh}(h]h ]h"]h$]h&]uh1jhjUWhM>)hjVubeh}(h]h ]h"]h$]h&]uh1jhjpVubj9)}(h**Description**h]jz)}(hj{Wh]h Description}(hj}WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyWubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM@)hjpVubj9)}(hQDetermine if **sg** is a busier group than the previously selected busiest group.h](h Determine if }(hjWhhhNhNubjz)}(h**sg**h]hsg}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh> is a busier group than the previously selected busiest group.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM?)hjpVubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMB)hjpVubj9)}(he``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh if }(hjWhhhNhNubjz)}(h**sg**h]hsg}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh? is a busier group than the previously selected busiest group. }(hjWhhhNhNubj?)}(h ``false``h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubh otherwise.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMC)hjpVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌidle_cpu_without (C function)c.idle_cpu_withouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(h5int idle_cpu_without (int cpu, struct task_struct *p)h]h)}(h4int idle_cpu_without(int cpu, struct task_struct *p)h](j)}(hinth]hint}(hj+XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'XhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*ubj=)}(h h]h }(hj:XhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'Xhhhj9XhM*ubh)}(hidle_cpu_withouth]h)}(hidle_cpu_withouth]hidle_cpu_without}(hjLXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'Xhhhj9XhM*ubj )}(h (int cpu, struct task_struct *p)h](j&)}(hint cpuh](j)}(hinth]hint}(hjhXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdXubj=)}(h h]h }(hjvXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdXubh)}(hcpuh]hcpu}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdXubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`Xubj&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hjXhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjXubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubh)}(hhh]h)}(h task_structh]h task_struct}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjXmodnameN classnameNjcjf)}ji]jl)}j_jNXsbc.idle_cpu_withoutasbuh1hhjXubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hjh]hp}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`Xubeh}(h]h ]h"]h$]h&]jj uh1jhj'Xhhhj9XhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#Xhhhj9XhM*ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhj9XhM*hj Xhhubj )}(hhh]j9)}(h%would a given CPU be idle without p ?h]h%would a given CPU be idle without p ?}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjYhhubah}(h]h ]h"]h$]h&]uh1jhj Xhhhj9XhM*ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7Yj4j7Yj5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``int cpu`` the processor on which idleness is tested. ``struct task_struct *p`` task which should be ignored. **Return** 1 if the CPU would be idle. 0 otherwise.h](j9)}(h**Parameters**h]jz)}(hjAYh]h Parameters}(hjCYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?Yubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj;Yubj)}(hhh](j)}(h7``int cpu`` the processor on which idleness is tested. h](j)}(h ``int cpu``h]j?)}(hj`Yh]hint cpu}(hjbYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^Yubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjZYubj)}(hhh]j9)}(h*the processor on which idleness is tested.h]h*the processor on which idleness is tested.}(hjyYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuYhM*hjvYubah}(h]h ]h"]h$]h&]uh1jhjZYubeh}(h]h ]h"]h$]h&]uh1jhjuYhM*hjWYubj)}(h8``struct task_struct *p`` task which should be ignored. h](j)}(h``struct task_struct *p``h]j?)}(hjYh]hstruct task_struct *p}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjYubj)}(hhh]j9)}(htask which should be ignored.h]htask which should be ignored.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhM*hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM*hjWYubeh}(h]h ]h"]h$]h&]uh1jhj;Yubj9)}(h **Return**h]jz)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj;Yubj9)}(h(1 if the CPU would be idle. 0 otherwise.h]h(1 if the CPU would be idle. 0 otherwise.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj;Yubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌupdate_sd_lb_stats (C function)c.update_sd_lb_statshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hEvoid update_sd_lb_stats (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hDvoid update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+ubj=)}(h h]h }(hj(ZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhj'ZhM+ubh)}(hupdate_sd_lb_statsh]h)}(hupdate_sd_lb_statsh]hupdate_sd_lb_stats}(hj:ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Zubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhj'ZhM+ubj )}(h-(struct lb_env *env, struct sd_lb_stats *sds)h](j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hjVZhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRZubj=)}(h h]h }(hjcZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRZubh)}(hhh]h)}(hlb_envh]hlb_env}(hjtZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjvZmodnameN classnameNjcjf)}ji]jl)}j_jhj[ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj[ubj)}(hhh]j9)}(hThe load balancing environment.h]hThe load balancing environment.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hM+hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM+hj[ubj)}(hR``struct sd_lb_stats *sds`` variable to hold the statistics for this sched_domain.h](j)}(h``struct sd_lb_stats *sds``h]j?)}(hj[h]hstruct sd_lb_stats *sds}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj[ubj)}(hhh]j9)}(h6variable to hold the statistics for this sched_domain.h]h6variable to hold the statistics for this sched_domain.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hM+hj[ubeh}(h]h ]h"]h$]h&]uh1jhje[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ calculate_imbalance (C function)c.calculate_imbalancehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hFvoid calculate_imbalance (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hEvoid calculate_imbalance(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+ubj=)}(h h]h }(hj,\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\hhhj+\hM+ubh)}(hcalculate_imbalanceh]h)}(hcalculate_imbalanceh]hcalculate_imbalance}(hj>\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhj+\hM+ubj )}(h-(struct lb_env *env, struct sd_lb_stats *sds)h](j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hjZ\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjV\ubj=)}(h h]h }(hjg\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjV\ubh)}(hhh]h)}(hlb_envh]hlb_env}(hjx\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjz\modnameN classnameNjcjf)}ji]jl)}j_j@\sbc.calculate_imbalanceasbuh1hhjV\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjV\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV\ubh)}(henvh]henv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjR\ubj&)}(hstruct sd_lb_stats *sdsh](j+)}(hj.h]hstruct}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubh)}(hhh]h)}(h sd_lb_statsh]h sd_lb_stats}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]j\c.calculate_imbalanceasbuh1hhj\ubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hsdsh]hsds}(hj#]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjR\ubeh}(h]h ]h"]h$]h&]jj uh1jhj\hhhj+\hM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhj+\hM+ubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhj+\hM+hj\hhubj )}(hhh]j9)}(hhCalculate the amount of imbalance present within the groups of a given sched_domain during load balance.h]hhCalculate the amount of imbalance present within the groups of a given sched_domain during load balance.}(hjM]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hjJ]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj+\hM+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3je]j4je]j5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct lb_env *env`` load balance environment ``struct sd_lb_stats *sds`` statistics of the sched_domain whose imbalance is to be calculated.h](j9)}(h**Parameters**h]jz)}(hjo]h]h Parameters}(hjq]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm]ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hji]ubj)}(hhh](j)}(h0``struct lb_env *env`` load balance environment h](j)}(h``struct lb_env *env``h]j?)}(hj]h]hstruct lb_env *env}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj]ubj)}(hhh]j9)}(hload balance environmenth]hload balance environment}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hM+hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM+hj]ubj)}(h_``struct sd_lb_stats *sds`` statistics of the sched_domain whose imbalance is to be calculated.h](j)}(h``struct sd_lb_stats *sds``h]j?)}(hj]h]hstruct sd_lb_stats *sds}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj]ubj)}(hhh]j9)}(hCstatistics of the sched_domain whose imbalance is to be calculated.h]hCstatistics of the sched_domain whose imbalance is to be calculated.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM+hj]ubeh}(h]h ]h"]h$]h&]uh1jhji]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)sched_balance_find_src_group (C function)c.sched_balance_find_src_grouphNtauh1hhj$hhhNhNubh)}(hhh](h)}(hFstruct sched_group * sched_balance_find_src_group (struct lb_env *env)h]h)}(hDstruct sched_group *sched_balance_find_src_group(struct lb_env *env)h](j+)}(hj.h]hstruct}(hj!^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,ubj=)}(h h]h }(hj/^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhj.^hM,ubh)}(hhh]h)}(h sched_grouph]h sched_group}(hj@^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjB^modnameN classnameNjcjf)}ji]jl)}j_sched_balance_find_src_groupsbc.sched_balance_find_src_groupasbuh1hhj^hhhj.^hM,ubj=)}(h h]h }(hja^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhj.^hM,ubj)}(hjh]h*}(hjo^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj.^hM,ubh)}(hsched_balance_find_src_grouph]h)}(hj^^h]hsched_balance_find_src_group}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj.^hM,ubj )}(h(struct lb_env *env)h]j&)}(hstruct lb_env *envh](j+)}(hj.h]hstruct}(hj^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hhh]h)}(hlb_envh]hlb_env}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]j\^c.sched_balance_find_src_groupasbuh1hhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(henvh]henv}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubah}(h]h ]h"]h$]h&]jj uh1jhj^hhhj.^hM,ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj.^hM,ubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhj.^hM,hj^hhubj )}(hhh]j9)}(hKReturns the busiest group within the sched_domain if there is an imbalance.h]hKReturns the busiest group within the sched_domain if there is an imbalance.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj.^hM,ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4_j4j4_j5j6j7uh1hhhhj$hNhNubjp)}(h**Parameters** ``struct lb_env *env`` The load balancing environment. **Description** Also calculates the amount of runnable load which should be moved to restore balance. **Return** - The busiest group if imbalance exists.h](j9)}(h**Parameters**h]jz)}(hj>_h]h Parameters}(hj@_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<_ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj8_ubj)}(hhh]j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]j?)}(hj]_h]hstruct lb_env *env}(hj__hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[_ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hjW_ubj)}(hhh]j9)}(hThe load balancing environment.h]hThe load balancing environment.}(hjv_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjr_hM,hjs_ubah}(h]h ]h"]h$]h&]uh1jhjW_ubeh}(h]h ]h"]h$]h&]uh1jhjr_hM,hjT_ubah}(h]h ]h"]h$]h&]uh1jhj8_ubj9)}(h**Description**h]jz)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj8_ubj9)}(hUAlso calculates the amount of runnable load which should be moved to restore balance.h]hUAlso calculates the amount of runnable load which should be moved to restore balance.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj8_ubj9)}(h **Return**h]jz)}(hj_h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj8_ubh bullet_list)}(hhh]jp)}(h&The busiest group if imbalance exists.h]j9)}(hj_h]h&The busiest group if imbalance exists.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hj_ubah}(h]h ]h"]h$]h&]uh1johj_ubah}(h]h ]h"]h$]h&]bullet-uh1j_hj_hM,hj8_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDECLARE_COMPLETION (C macro)c.DECLARE_COMPLETIONhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]h)}(hj`h]hDECLARE_COMPLETION}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-ubah}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj1`hK-ubah}(h]j `ah ](jjeh"]h$]h&]jj)jhuh1hhj1`hK-hj`hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`hhhj1`hK-ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jJ`j4jJ`j5j6j7uh1hhhhj$hNhNubj9)}(h``DECLARE_COMPLETION (work)``h]j?)}(hjP`h]hDECLARE_COMPLETION (work)}(hjR`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjN`ubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hj$hhubjU)}(h.declare and initialize a completion structure h]j9)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-hjf`ubah}(h]h ]h"]h$]h&]uh1jThjx`hK-hj$hhubjp)}(h**Parameters** ``work`` identifier for the completion structure **Description** This macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.h](j9)}(h**Parameters**h]jz)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK1hj`ubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]j?)}(hj`h]hwork}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK.hj`ubj)}(hhh]j9)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hK.hj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hK.hj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubj9)}(h**Description**h]jz)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK0hj`ubj9)}(hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.h]hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$DECLARE_COMPLETION_ONSTACK (C macro)c.DECLARE_COMPLETION_ONSTACKhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hjah]hDECLARE_COMPLETION_ONSTACK}(hj(ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$aubah}(h]h ](jjeh"]h$]h&]jj uh1hhj ahhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=ubah}(h]h ]h"]h$]h&]jj juh1hjjhjahhhj;ahK=ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhj;ahK=hjahhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjahhhj;ahK=ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jTaj4jTaj5j6j7uh1hhhhj$hNhNubj9)}(h%``DECLARE_COMPLETION_ONSTACK (work)``h]j?)}(hjZah]h!DECLARE_COMPLETION_ONSTACK (work)}(hj\ahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXaubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hj$hhubjU)}(h.declare and initialize a completion structure h]j9)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjtahhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=hjpaubah}(h]h ]h"]h$]h&]uh1jThjahK=hj$hhubjp)}(h**Parameters** ``work`` identifier for the completion structure **Description** This macro declares and initializes a completion structure on the kernel stack.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKAhjaubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]j?)}(hjah]hwork}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK>hjaubj)}(hhh]j9)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahK>hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahK>hjaubah}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK@hjaubj9)}(hOThis macro declares and initializes a completion structure on the kernel stack.h]hOThis macro declares and initializes a completion structure on the kernel stack.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinit_completion (C function)c.init_completionhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+void init_completion (struct completion *x)h]h)}(h*void init_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hj.bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*bhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNubj=)}(h h]h }(hj=bhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*bhhhjhj-cubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKOhj)cubj)}(hhh]j9)}(h9pointer to completion structure that is to be initializedh]h9pointer to completion structure that is to be initialized}(hjHchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDchKOhjEcubah}(h]h ]h"]h$]h&]uh1jhj)cubeh}(h]h ]h"]h$]h&]uh1jhjDchKOhj&cubah}(h]h ]h"]h$]h&]uh1jhj cubj9)}(h**Description**h]jz)}(hjjch]h Description}(hjlchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhcubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKQhj cubj9)}(hPThis inline function will initialize a dynamically created completion structure.h]hPThis inline function will initialize a dynamically created completion structure.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKPhj cubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌreinit_completion (C function)c.reinit_completionhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h-void reinit_completion (struct completion *x)h]h)}(h,void reinit_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[ubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjchhhjchK[ubh)}(hreinit_completionh]h)}(hreinit_completionh]hreinit_completion}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjchK[ubj )}(h(struct completion *x)h]j&)}(hstruct completion *xh](j+)}(hj.h]hstruct}(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjcubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjcubh)}(hhh]h)}(h completionh]h completion}(hj dhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj dmodnameN classnameNjcjf)}ji]jl)}j_jcsbc.reinit_completionasbuh1hhjcubj=)}(h h]h }(hj*dhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjcubj)}(hjh]h*}(hj8dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hjbh]hx}(hjEdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubah}(h]h ]h"]h$]h&]jj uh1jhjchhhjchK[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjchK[ubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1hhjchK[hjchhubj )}(hhh]j9)}(h#reinitialize a completion structureh]h#reinitialize a completion structure}(hjndhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[hjkdhhubah}(h]h ]h"]h$]h&]uh1jhjchhhjchK[ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jd,j4jdj5j6j7uh1hhhhj$hNhNubjp)}(hX**Parameters** ``struct completion *x`` pointer to completion structure that is to be reinitialized **Description** This inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.h](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK_hjdubj)}(hhh]j)}(hU``struct completion *x`` pointer to completion structure that is to be reinitialized h](j)}(h``struct completion *x``h]j?)}(hjdh]hstruct completion *x}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK\hjdubj)}(hhh]j9)}(h;pointer to completion structure that is to be reinitializedh]h;pointer to completion structure that is to be reinitialized}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhK\hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhK\hjdubah}(h]h ]h"]h$]h&]uh1jhjdubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK^hjdubj9)}(hThis inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.h]hThis inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8h\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK]hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj$hhhNhNubeh}(h] delaying-and-scheduling-routinesah ]h"] delaying and scheduling routinesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTime and timer routinesh]hTime and timer routines}(hj!ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhK%ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_jiffies_64 (C function)c.get_jiffies_64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hu64 get_jiffies_64 (void)h]h)}(hu64 get_jiffies_64(void)h](h)}(hhh]h)}(hu64h]hu64}(hjKehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMemodnameN classnameNjcjf)}ji]jl)}j_get_jiffies_64sbc.get_jiffies_64asbuh1hhjDehhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK\ubj=)}(h h]h }(hjmehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDehhhjlehK\ubh)}(hget_jiffies_64h]h)}(hjieh]hget_jiffies_64}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{eubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDehhhjlehK\ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubah}(h]h ]h"]h$]h&]jj uh1jhjDehhhjlehK\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@ehhhjlehK\ubah}(h]j;eah ](jjeh"]h$]h&]jj)jhuh1hhjlehK\hj=ehhubj )}(hhh]j9)}(h+read the 64-bit non-atomic jiffies_64 valueh]h+read the 64-bit non-atomic jiffies_64 value}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK\hjehhubah}(h]h ]h"]h$]h&]uh1jhj=ehhhjlehK\ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``void`` no arguments **Description** When BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read. **Return** current 64-bit jiffies valueh](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK`hjeubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjfh]hvoid}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjeubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhKhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjeubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hj@fh]h Description}(hjBfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>fubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjeubj9)}(hjWhen BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read.h]hjWhen BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read.}(hjVfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK]hjeubj9)}(h **Return**h]jz)}(hjgfh]hReturn}(hjifhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjefubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK`hjeubj9)}(hcurrent 64-bit jiffies valueh]hcurrent 64-bit jiffies value}(hj}fhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKahjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after (C macro) c.time_afterhNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_afterh]h)}(h time_afterh]h)}(h time_afterh]h)}(hjfh]h time_after}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuubah}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhjfhKuubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1hhjfhKuhjfhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjfhhhjfhKuubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jfj4jfj5j6j7uh1hhhhjehNhNubj9)}(h``time_after (a, b)``h]j?)}(hjfh]htime_after (a, b)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKwhjehhubjU)}(h,returns true if the time a is after time b. h]j9)}(h+returns true if the time a is after time b.h]h+returns true if the time a is after time b.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjfubah}(h]h ]h"]h$]h&]uh1jThj ghKuhjehhubjp)}(hXo**Parameters** ``a`` first comparable as unsigned long ``b`` second comparable as unsigned long **Description** Do this with "<0" and ">=0" to only test the sign of the result. A good compiler would generate better code (and a really good compiler wouldn't care). Gcc is currently neither. **Return** ``true`` is time a is after time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhjgubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]j?)}(hj6gh]ha}(hj8ghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4gubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKvhj0gubj)}(hhh]j9)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjOghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKghKvhjLgubah}(h]h ]h"]h$]h&]uh1jhj0gubeh}(h]h ]h"]h$]h&]uh1jhjKghKvhj-gubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]j?)}(hjogh]hb}(hjqghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKwhjigubj)}(hhh]j9)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjghKwhjgubah}(h]h ]h"]h$]h&]uh1jhjigubeh}(h]h ]h"]h$]h&]uh1jhjghKwhj-gubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h**Description**h]jz)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhjgubj9)}(hDo this with "<0" and ">=0" to only test the sign of the result. A good compiler would generate better code (and a really good compiler wouldn't care). Gcc is currently neither.h]hDo this with “<0” and “>=0” to only test the sign of the result. A good compiler would generate better code (and a really good compiler wouldn’t care). Gcc is currently neither.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKxhjgubj9)}(h **Return**h]jz)}(hjgh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK|hjgubj9)}(h8``true`` is time a is after time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubh& is time a is after time b, otherwise }(hjghhhNhNubj?)}(h ``false``h]hfalse}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK}hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before (C macro) c.time_beforehNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_beforeh]h)}(h time_beforeh]h)}(h time_beforeh]h)}(hj0hh]h time_before}(hj:hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6hubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2hhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhhjMhhKubah}(h]j)hah ](jjeh"]h$]h&]jj)jhuh1hhjMhhKhj+hhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj+hhhhjMhhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jfhj4jfhj5j6j7uh1hhhhjehNhNubj9)}(h``time_before (a, b)``h]j?)}(hjlhh]htime_before (a, b)}(hjnhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjhubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h-returns true if the time a is before time b. h]j9)}(h,returns true if the time a is before time b.h]h,returns true if the time a is before time b.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubah}(h]h ]h"]h$]h&]uh1jThjhhKhjehhubjp)}(h**Parameters** ``a`` first comparable as unsigned long ``b`` second comparable as unsigned long **Return** ``true`` is time a is before time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]j?)}(hjhh]ha}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubj)}(hhh]j9)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhKhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjhubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]j?)}(hjhh]hb}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubj)}(hhh]j9)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihKhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihKhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h **Return**h]jz)}(hj4ih]hReturn}(hj6ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2iubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubj9)}(h9``true`` is time a is before time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjNihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJiubh' is time a is before time b, otherwise }(hjJihhhNhNubj?)}(h ``false``h]hfalse}(hj`ihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJiubh.}(hjJihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after_eq (C macro)c.time_after_eqhNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(hjih]h time_after_eq}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjihKubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhjihKhjihhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjihhhjihKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jij4jij5j6j7uh1hhhhjehNhNubj9)}(h``time_after_eq (a, b)``h]j?)}(hjih]htime_after_eq (a, b)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h;returns true if the time a is after or the same as time b. h]j9)}(h:returns true if the time a is after or the same as time b.h]h:returns true if the time a is after or the same as time b.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubah}(h]h ]h"]h$]h&]uh1jThjihKhjehhubjp)}(h**Parameters** ``a`` first comparable as unsigned long ``b`` second comparable as unsigned long **Return** ``true`` is time a is after or the same as time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]j?)}(hj#jh]ha}(hj%jhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!jubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjjubj)}(hhh]j9)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjhjZjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjVjubj)}(hhh]j9)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjujhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqjhKhjrjubah}(h]h ]h"]h$]h&]uh1jhjVjubeh}(h]h ]h"]h$]h&]uh1jhjqjhKhjjubeh}(h]h ]h"]h$]h&]uh1jhjiubj9)}(h **Return**h]jz)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubj9)}(hG``true`` is time a is after or the same as time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubh5 is time a is after or the same as time b, otherwise }(hjjhhhNhNubj?)}(h ``false``h]hfalse}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before_eq (C macro)c.time_before_eqhNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_before_eqh]h)}(htime_before_eqh]h)}(htime_before_eqh]h)}(hjjh]htime_before_eq}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjkhKubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1hhjkhKhjjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjjhhhjkhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j,kj4j,kj5j6j7uh1hhhhjehNhNubj9)}(h``time_before_eq (a, b)``h]j?)}(hj2kh]htime_before_eq (a, b)}(hj4khhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0kubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(hhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjkubj)}(hhh]j9)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhKhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKhj}kubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]j?)}(hjkh]hb}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjkubj)}(hhh]j9)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhKhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKhj}kubeh}(h]h ]h"]h$]h&]uh1jhjakubj9)}(h **Return**h]jz)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjakubj9)}(hH``true`` is time a is before or the same as time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh6 is time a is before or the same as time b, otherwise }(hjlhhhNhNubj?)}(h ``false``h]hfalse}(hj&lhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjakubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_in_range (C macro)c.time_in_rangehNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_in_rangeh]h)}(h time_in_rangeh]h)}(h time_in_rangeh]h)}(hjYlh]h time_in_range}(hjclhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_lubah}(h]h ](jjeh"]h$]h&]jj uh1hhj[lhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjWlhhhjvlhKubah}(h]jRlah ](jjeh"]h$]h&]jj)jhuh1hhjvlhKhjTlhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjTlhhhjvlhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhjehNhNubj9)}(h``time_in_range (a, b, c)``h]j?)}(hjlh]htime_in_range (a, b, c)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h/Calculate whether a is in the range of [b, c]. h]j9)}(h.Calculate whether a is in the range of [b, c].h]h.Calculate whether a is in the range of [b, c].}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjlubah}(h]h ]h"]h$]h&]uh1jThjlhKhjehhubjp)}(h**Parameters** ``a`` time to test ``b`` beginning of the range ``c`` end of the range **Return** ``true`` is time a is in the range [b, c], otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjlubj)}(hhh](j)}(h``a`` time to test h](j)}(h``a``h]j?)}(hjlh]ha}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjlubj)}(hhh]j9)}(h time to testh]h time to test}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhKhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjlubj)}(h``b`` beginning of the range h](j)}(h``b``h]j?)}(hj"mh]hb}(hj$mhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj mubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjmubj)}(hhh]j9)}(hbeginning of the rangeh]hbeginning of the range}(hj;mhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7mhKhj8mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj7mhKhjlubj)}(h``c`` end of the range h](j)}(h``c``h]j?)}(hj[mh]hc}(hj]mhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjUmubj)}(hhh]j9)}(hend of the rangeh]hend of the range}(hjtmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpmhKhjqmubah}(h]h ]h"]h$]h&]uh1jhjUmubeh}(h]h ]h"]h$]h&]uh1jhjpmhKhjlubeh}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h **Return**h]jz)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjlubj9)}(h?``true`` is time a is in the range [b, c], otherwise ``false``.h](j?)}(h``true``h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubh- is time a is in the range [b, c], otherwise }(hjmhhhNhNubj?)}(h ``false``h]hfalse}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_in_range_open (C macro)c.time_in_range_openhNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_in_range_openh]h)}(htime_in_range_openh]h)}(htime_in_range_openh]h)}(hjmh]htime_in_range_open}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjnhKubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1hhjnhKhjmhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjmhhhjnhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j+nj4j+nj5j6j7uh1hhhhjehNhNubj9)}(h ``time_in_range_open (a, b, c)``h]j?)}(hj1nh]htime_in_range_open (a, b, c)}(hj3nhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/nubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h/Calculate whether a is in the range of [b, c). h]j9)}(h.Calculate whether a is in the range of [b, c).h]h.Calculate whether a is in the range of [b, c).}(hjKnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjGnubah}(h]h ]h"]h$]h&]uh1jThjYnhKhjehhubjp)}(h**Parameters** ``a`` time to test ``b`` beginning of the range ``c`` end of the range **Return** ``true`` is time a is in the range [b, c), otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjfnh]h Parameters}(hjhnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdnubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj`nubj)}(hhh](j)}(h``a`` time to test h](j)}(h``a``h]j?)}(hjnh]ha}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjnubj)}(hhh]j9)}(h time to testh]h time to test}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhKhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhKhj|nubj)}(h``b`` beginning of the range h](j)}(h``b``h]j?)}(hjnh]hb}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjnubj)}(hhh]j9)}(hbeginning of the rangeh]hbeginning of the range}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhKhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhKhj|nubj)}(h``c`` end of the range h](j)}(h``c``h]j?)}(hjnh]hc}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjnubj)}(hhh]j9)}(hend of the rangeh]hend of the range}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ohKhj oubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj ohKhj|nubeh}(h]h ]h"]h$]h&]uh1jhj`nubj9)}(h **Return**h]jz)}(hj2oh]hReturn}(hj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0oubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj`nubj9)}(h?``true`` is time a is in the range [b, c), otherwise ``false``.h](j?)}(h``true``h]htrue}(hjLohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHoubh- is time a is in the range [b, c), otherwise }(hjHohhhNhNubj?)}(h ``false``h]hfalse}(hj^ohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHoubh.}(hjHohhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj`nubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after64 (C macro)c.time_after64hNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_after64h]h)}(h time_after64h]h)}(h time_after64h]h)}(hjoh]h time_after64}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjohKubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1hhjohKhjohhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjohhhjohKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3joj4joj5j6j7uh1hhhhjehNhNubj9)}(h``time_after64 (a, b)``h]j?)}(hjoh]htime_after64 (a, b)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h,returns true if the time a is after time b. h]j9)}(h+returns true if the time a is after time b.h]h+returns true if the time a is after time b.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubah}(h]h ]h"]h$]h&]uh1jThjohKhjehhubjp)}(hX**Parameters** ``a`` first comparable as __u64 ``b`` second comparable as __u64 **Description** This must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()). **Return** ``true`` is time a is after time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubj)}(hhh](j)}(h ``a`` first comparable as __u64 h](j)}(h``a``h]j?)}(hj!ph]ha}(hj#phhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjpubj)}(hhh]j9)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hj:phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6phKhj7pubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhj6phKhjpubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j?)}(hjZph]hb}(hj\phhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXpubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjTpubj)}(hhh]j9)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjsphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjophKhjppubah}(h]h ]h"]h$]h&]uh1jhjTpubeh}(h]h ]h"]h$]h&]uh1jhjophKhjpubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubj9)}(hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).h]hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubj9)}(h8``true`` is time a is after time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubh& is time a is after time b, otherwise }(hjphhhNhNubj?)}(h ``false``h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubh.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before64 (C macro)c.time_before64hNtauh1hhjehhhNhNubh)}(hhh](h)}(h time_before64h]h)}(h time_before64h]h)}(h time_before64h]h)}(hjqh]h time_before64}(hj%qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!qubah}(h]h ](jjeh"]h$]h&]jj uh1hhjqhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhj8qhKubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1hhj8qhKhjqhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjqhhhj8qhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jQqj4jQqj5j6j7uh1hhhhjehNhNubj9)}(h``time_before64 (a, b)``h]j?)}(hjWqh]htime_before64 (a, b)}(hjYqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUqubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h-returns true if the time a is before time b. h]j9)}(h,returns true if the time a is before time b.h]h,returns true if the time a is before time b.}(hjqqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjmqubah}(h]h ]h"]h$]h&]uh1jThjqhKhjehhubjp)}(hX**Parameters** ``a`` first comparable as __u64 ``b`` second comparable as __u64 **Description** This must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()). **Return** ``true`` is time a is before time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj)}(hhh](j)}(h ``a`` first comparable as __u64 h](j)}(h``a``h]j?)}(hjqh]ha}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj)}(hhh]j9)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjqubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j?)}(hjqh]hb}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj)}(hhh]j9)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjrh]h Description}(hj!rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj9)}(hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).h]hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).}(hj5rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj9)}(h **Return**h]jz)}(hjFrh]hReturn}(hjHrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDrubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubj9)}(h9``true`` is time a is before time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\rubh' is time a is before time b, otherwise }(hj\rhhhNhNubj?)}(h ``false``h]hfalse}(hjrrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\rubh.}(hj\rhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_after_eq64 (C macro)c.time_after_eq64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_after_eq64h]h)}(htime_after_eq64h]h)}(htime_after_eq64h]h)}(hjrh]htime_after_eq64}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjrhKubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjrhKhjrhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjrhhhjrhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jrj4jrj5j6j7uh1hhhhjehNhNubj9)}(h``time_after_eq64 (a, b)``h]j?)}(hjrh]htime_after_eq64 (a, b)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h;returns true if the time a is after or the same as time b. h]j9)}(h:returns true if the time a is after or the same as time b.h]h:returns true if the time a is after or the same as time b.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjrubah}(h]h ]h"]h$]h&]uh1jThj shKhjehhubjp)}(hX**Parameters** ``a`` first comparable as __u64 ``b`` second comparable as __u64 **Description** This must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()). **Return** ``true`` is time a is after or the same as time b, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubj)}(hhh](j)}(h ``a`` first comparable as __u64 h](j)}(h``a``h]j?)}(hj5sh]ha}(hj7shhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3subah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj/subj)}(hhh]j9)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hjNshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJshKhjKsubah}(h]h ]h"]h$]h&]uh1jhj/subeh}(h]h ]h"]h$]h&]uh1jhjJshKhj,subj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j?)}(hjnsh]hb}(hjpshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlsubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhsubj)}(hhh]j9)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjhsubeh}(h]h ]h"]h$]h&]uh1jhjshKhj,subeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubj9)}(hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).h]hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubj9)}(h **Return**h]jz)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubj9)}(hG``true`` is time a is after or the same as time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh5 is time a is after or the same as time b, otherwise }(hjshhhNhNubj?)}(h ``false``h]hfalse}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_before_eq64 (C macro)c.time_before_eq64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_before_eq64h]h)}(htime_before_eq64h]h)}(htime_before_eq64h]h)}(hj/th]htime_before_eq64}(hj9thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5tubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1thhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj-thhhjLthKubah}(h]j(tah ](jjeh"]h$]h&]jj)jhuh1hhjLthKhj*thhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj*thhhjLthKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jetj4jetj5j6j7uh1hhhhjehNhNubj9)}(h``time_before_eq64 (a, b)``h]j?)}(hjkth]htime_before_eq64 (a, b)}(hjmthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjitubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(hhjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubj)}(hhh]j9)}(hfirst comparable as __u64h]hfirst comparable as __u64}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthKhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthKhjtubj)}(h!``b`` second comparable as __u64 h](j)}(h``b``h]j?)}(hjth]hb}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubj)}(hhh]j9)}(hsecond comparable as __u64h]hsecond comparable as __u64}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj uhKhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj uhKhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hj3uh]h Description}(hj5uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1uubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubj9)}(hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).h]hTThis must be used when utilizing jiffies_64 (i.e. return value of get_jiffies_64()).}(hjIuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubj9)}(h **Return**h]jz)}(hjZuh]hReturn}(hj\uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXuubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubj9)}(hH``true`` is time a is before or the same as time b, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjtuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpuubh6 is time a is before or the same as time b, otherwise }(hjpuhhhNhNubj?)}(h ``false``h]hfalse}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpuubh.}(hjpuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_in_range64 (C macro)c.time_in_range64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_in_range64h]h)}(htime_in_range64h]h)}(htime_in_range64h]h)}(hjuh]htime_in_range64}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjuhKubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1hhjuhKhjuhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjuhhhjuhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhjehNhNubj9)}(h``time_in_range64 (a, b, c)``h]j?)}(hjuh]htime_in_range64 (a, b, c)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjehhubjU)}(h/Calculate whether a is in the range of [b, c]. h]j9)}(h.Calculate whether a is in the range of [b, c].h]h.Calculate whether a is in the range of [b, c].}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj vubah}(h]h ]h"]h$]h&]uh1jThjvhKhjehhubjp)}(h**Parameters** ``a`` time to test ``b`` beginning of the range ``c`` end of the range **Return** ``true`` is time a is in the range [b, c], otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hj*vh]h Parameters}(hj,vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(vubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj$vubj)}(hhh](j)}(h``a`` time to test h](j)}(h``a``h]j?)}(hjIvh]ha}(hjKvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjCvubj)}(hhh]j9)}(h time to testh]h time to test}(hjbvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^vhKhj_vubah}(h]h ]h"]h$]h&]uh1jhjCvubeh}(h]h ]h"]h$]h&]uh1jhj^vhKhj@vubj)}(h``b`` beginning of the range h](j)}(h``b``h]j?)}(hjvh]hb}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj|vubj)}(hhh]j9)}(hbeginning of the rangeh]hbeginning of the range}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhKhjvubah}(h]h ]h"]h$]h&]uh1jhj|vubeh}(h]h ]h"]h$]h&]uh1jhjvhKhj@vubj)}(h``c`` end of the range h](j)}(h``c``h]j?)}(hjvh]hc}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjvubj)}(hhh]j9)}(hend of the rangeh]hend of the range}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhKhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhKhj@vubeh}(h]h ]h"]h$]h&]uh1jhj$vubj9)}(h **Return**h]jz)}(hjvh]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj$vubj9)}(h?``true`` is time a is in the range [b, c], otherwise ``false``.h](j?)}(h``true``h]htrue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj wubh- is time a is in the range [b, c], otherwise }(hj whhhNhNubj?)}(h ``false``h]hfalse}(hj"whhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj wubh.}(hj whhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj$vubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ time_is_before_jiffies (C macro)c.time_is_before_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_before_jiffiesh]h)}(htime_is_before_jiffiesh]h)}(htime_is_before_jiffiesh]h)}(hjUwh]htime_is_before_jiffies}(hj_whhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[wubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWwhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjSwhhhjrwhMubah}(h]jNwah ](jjeh"]h$]h&]jj)jhuh1hhjrwhMhjPwhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjPwhhhjrwhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhjehNhNubj9)}(h``time_is_before_jiffies (a)``h]j?)}(hjwh]htime_is_before_jiffies (a)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjehhubjU)}(h#return true if a is before jiffies h]j9)}(h"return true if a is before jiffiesh]h"return true if a is before jiffies}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjwubah}(h]h ]h"]h$]h&]uh1jThjwhMhjehhubjp)}(h**Parameters** ``a`` time (unsigned long) to compare to jiffies **Return** ``true`` is time a is before jiffies, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjwubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j?)}(hjwh]ha}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjwubj)}(hhh]j9)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h **Return**h]jz)}(hj xh]hReturn}(hj"xhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjwubj9)}(h:``true`` is time a is before jiffies, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj:xhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6xubh( is time a is before jiffies, otherwise }(hj6xhhhNhNubj?)}(h ``false``h]hfalse}(hjLxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6xubh.}(hj6xhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"time_is_before_jiffies64 (C macro)c.time_is_before_jiffies64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_before_jiffies64h]h)}(htime_is_before_jiffies64h]h)}(htime_is_before_jiffies64h]h)}(hjxh]htime_is_before_jiffies64}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj}xhhhjxhMubah}(h]jxxah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhjzxhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjzxhhhjxhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhjehNhNubj9)}(h ``time_is_before_jiffies64 (a)``h]j?)}(hjxh]htime_is_before_jiffies64 (a)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjehhubjU)}(h&return true if a is before jiffies_64 h]j9)}(h%return true if a is before jiffies_64h]h%return true if a is before jiffies_64}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjxubah}(h]h ]h"]h$]h&]uh1jThjxhMhjehhubjp)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is before jiffies_64, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjxubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]j?)}(hjyh]ha}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj yubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hj yubj)}(hhh]j9)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj(yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$yhM hj%yubah}(h]h ]h"]h$]h&]uh1jhj yubeh}(h]h ]h"]h$]h&]uh1jhj$yhM hjyubah}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h **Return**h]jz)}(hjJyh]hReturn}(hjLyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjxubj9)}(h=``true`` is time a is before jiffies_64, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjdyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`yubh+ is time a is before jiffies_64, otherwise }(hj`yhhhNhNubj?)}(h ``false``h]hfalse}(hjvyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`yubh.}(hj`yhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtime_is_after_jiffies (C macro)c.time_is_after_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_after_jiffiesh]h)}(htime_is_after_jiffiesh]h)}(htime_is_after_jiffiesh]h)}(hjyh]htime_is_after_jiffies}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjyhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjyhMhjyhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjyhhhjyhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jyj4jyj5j6j7uh1hhhhjehNhNubj9)}(h``time_is_after_jiffies (a)``h]j?)}(hjyh]htime_is_after_jiffies (a)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjehhubjU)}(h"return true if a is after jiffies h]j9)}(h!return true if a is after jiffiesh]h!return true if a is after jiffies}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjyubah}(h]h ]h"]h$]h&]uh1jThj zhMhjehhubjp)}(h**Parameters** ``a`` time (unsigned long) to compare to jiffies **Return** ``true`` is time a is after jiffies, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j?)}(hj9zh]ha}(hj;zhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7zubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj3zubj)}(hhh]j9)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hjRzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNzhMhjOzubah}(h]h ]h"]h$]h&]uh1jhj3zubeh}(h]h ]h"]h$]h&]uh1jhjNzhMhj0zubah}(h]h ]h"]h$]h&]uh1jhjzubj9)}(h **Return**h]jz)}(hjtzh]hReturn}(hjvzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrzubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubj9)}(h9``true`` is time a is after jiffies, otherwise ``false``.h](j?)}(h``true``h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubh' is time a is after jiffies, otherwise }(hjzhhhNhNubj?)}(h ``false``h]hfalse}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!time_is_after_jiffies64 (C macro)c.time_is_after_jiffies64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]h)}(hjzh]htime_is_after_jiffies64}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjzhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjzhMhjzhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j {j4j {j5j6j7uh1hhhhjehNhNubj9)}(h``time_is_after_jiffies64 (a)``h]j?)}(hj{h]htime_is_after_jiffies64 (a)}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj {ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjehhubjU)}(h%return true if a is after jiffies_64 h]j9)}(h$return true if a is after jiffies_64h]h$return true if a is after jiffies_64}(hj){hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj%{ubah}(h]h ]h"]h$]h&]uh1jThj7{hMhjehhubjp)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is after jiffies_64, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjD{h]h Parameters}(hjF{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB{ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj>{ubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]j?)}(hjc{h]ha}(hje{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hja{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj]{ubj)}(hhh]j9)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj|{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjx{hMhjy{ubah}(h]h ]h"]h$]h&]uh1jhj]{ubeh}(h]h ]h"]h$]h&]uh1jhjx{hMhjZ{ubah}(h]h ]h"]h$]h&]uh1jhj>{ubj9)}(h **Return**h]jz)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj>{ubj9)}(h<``true`` is time a is after jiffies_64, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh* is time a is after jiffies_64, otherwise }(hj{hhhNhNubj?)}(h ``false``h]hfalse}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj>{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#time_is_before_eq_jiffies (C macro)c.time_is_before_eq_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]h)}(hj{h]htime_is_before_eq_jiffies}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj|hMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhj|hMhj{hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj{hhhj|hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j3|j4j3|j5j6j7uh1hhhhjehNhNubj9)}(h!``time_is_before_eq_jiffies (a)``h]j?)}(hj9|h]htime_is_before_eq_jiffies (a)}(hj;|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7|ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM!hjehhubjU)}(h/return true if a is before or equal to jiffies h]j9)}(h.return true if a is before or equal to jiffiesh]h.return true if a is before or equal to jiffies}(hjS|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjO|ubah}(h]h ]h"]h$]h&]uh1jThja|hMhjehhubjp)}(h**Parameters** ``a`` time (unsigned long) to compare to jiffies **Return** ``true`` is time a is before or the same as jiffies, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjn|h]h Parameters}(hjp|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl|ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hjh|ubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j?)}(hj|h]ha}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hj|ubj)}(hhh]j9)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hM hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj|ubah}(h]h ]h"]h$]h&]uh1jhjh|ubj9)}(h **Return**h]jz)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"hjh|ubj9)}(hI``true`` is time a is before or the same as jiffies, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubh7 is time a is before or the same as jiffies, otherwise }(hj|hhhNhNubj?)}(h ``false``h]hfalse}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM"hjh|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%time_is_before_eq_jiffies64 (C macro)c.time_is_before_eq_jiffies64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]h)}(htime_is_before_eq_jiffies64h]h)}(hj'}h]htime_is_before_eq_jiffies64}(hj1}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)}hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM&ubah}(h]h ]h"]h$]h&]jj juh1hjjhj%}hhhjD}hM&ubah}(h]j }ah ](jjeh"]h$]h&]jj)jhuh1hhjD}hM&hj"}hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj"}hhhjD}hM&ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j]}j4j]}j5j6j7uh1hhhhjehNhNubj9)}(h#``time_is_before_eq_jiffies64 (a)``h]j?)}(hjc}h]htime_is_before_eq_jiffies64 (a)}(hje}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hja}ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM(hjehhubjU)}(h2return true if a is before or equal to jiffies_64 h]j9)}(h1return true if a is before or equal to jiffies_64h]h1return true if a is before or equal to jiffies_64}(hj}}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM&hjy}ubah}(h]h ]h"]h$]h&]uh1jThj}hM&hjehhubjp)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is before or the same jiffies_64, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM*hj}ubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]j?)}(hj}h]ha}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM'hj}ubj)}(hhh]j9)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hM'hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM'hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubj9)}(h **Return**h]jz)}(hj}h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM)hj}ubj9)}(hI``true`` is time a is before or the same jiffies_64, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubh7 is time a is before or the same jiffies_64, otherwise }(hj~hhhNhNubj?)}(h ``false``h]hfalse}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM)hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"time_is_after_eq_jiffies (C macro)c.time_is_after_eq_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(hjQ~h]htime_is_after_eq_jiffies}(hj[~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjS~hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM.ubah}(h]h ]h"]h$]h&]jj juh1hjjhjO~hhhjn~hM.ubah}(h]jJ~ah ](jjeh"]h$]h&]jj)jhuh1hhjn~hM.hjL~hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjL~hhhjn~hM.ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhjehNhNubj9)}(h ``time_is_after_eq_jiffies (a)``h]j?)}(hj~h]htime_is_after_eq_jiffies (a)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM0hjehhubjU)}(h.return true if a is after or equal to jiffies h]j9)}(h-return true if a is after or equal to jiffiesh]h-return true if a is after or equal to jiffies}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM.hj~ubah}(h]h ]h"]h$]h&]uh1jThj~hM.hjehhubjp)}(h**Parameters** ``a`` time (unsigned long) to compare to jiffies **Return** ``true`` is time a is after or the same as jiffies, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hj~ubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]j?)}(hj~h]ha}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM/hj~ubj)}(hhh]j9)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM/hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM/hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hj~ubj9)}(hH``true`` is time a is after or the same as jiffies, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubh6 is time a is after or the same as jiffies, otherwise }(hj2hhhNhNubj?)}(h ``false``h]hfalse}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$time_is_after_eq_jiffies64 (C macro)c.time_is_after_eq_jiffies64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(hj{h]htime_is_after_eq_jiffies64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5ubah}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjhM5ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1hhjhM5hjvhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjvhhhjhM5ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubj9)}(h"``time_is_after_eq_jiffies64 (a)``h]j?)}(hjh]htime_is_after_eq_jiffies64 (a)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM7hjehhubjU)}(h1return true if a is after or equal to jiffies_64 h]j9)}(h0return true if a is after or equal to jiffies_64h]h0return true if a is after or equal to jiffies_64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjubah}(h]h ]h"]h$]h&]uh1jThjhM5hjehhubjp)}(h**Parameters** ``a`` time (__u64) to compare to jiffies_64 **Return** ``true`` is time a is after or the same as jiffies_64, otherwise ``false``.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM9hjubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]j?)}(hj h]ha}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6hjubj)}(hhh]j9)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM6hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM6hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hjubj9)}(hK``true`` is time a is after or the same as jiffies_64, otherwise ``false``.h](j?)}(h``true``h]htrue}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh9 is time a is after or the same as jiffies_64, otherwise }(hj\hhhNhNubj?)}(h ``false``h]hfalse}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_msecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_msecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubj)}(hinth]hint}(hjȀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj=)}(h h]h }(hjրhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hjiffies_to_msecsh]h)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(const unsigned long j)h]j&)}(hconst unsigned long jh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hj}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``const unsigned long j`` jiffies value **Description** This inline version takes care of HZ in {100,250,1000}. **Return** milliseconds valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j?)}(hjh]hconst unsigned long j}(hjāhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hjہhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjׁhMhj؁ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjׁhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(h7This inline version takes care of HZ in {100,250,1000}.h]h7This inline version takes care of HZ in {100,250,1000}.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(h **Return**h]jz)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(hmilliseconds valueh]hmilliseconds value}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_usecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_usecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhjwhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhjwhMubh)}(hjiffies_to_usecsh]h)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjwhMubj )}(h(const unsigned long j)h]j&)}(hconst unsigned long jh](j+)}(hj<*h]hconst}(hj‚hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjςhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hj݂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhjwhMhj^hhubj )}(hhh]j9)}(hConvert jiffies to microsecondsh]hConvert jiffies to microseconds}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhjehNhNubjp)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](j9)}(h**Parameters**h]jz)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjZubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j?)}(hjh]hconst unsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjyubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjZubj9)}(hmicroseconds valueh]hmicroseconds value}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_nsecs (C function)c.jiffies_to_nsecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h,u64 jiffies_to_nsecs (const unsigned long j)h]h)}(h+u64 jiffies_to_nsecs(const unsigned long j)h](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jiffies_to_nsecssbc.jiffies_to_nsecsasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj#hMubh)}(hjiffies_to_nsecsh]h)}(hj h]hjiffies_to_nsecs}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj#hMubj )}(h(const unsigned long j)h]j&)}(hconst unsigned long jh](j+)}(hj<*h]hconst}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjIubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj#hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj#hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj#hMhjhhubj )}(hhh]j9)}(hConvert jiffies to nanosecondsh]hConvert jiffies to nanoseconds}(hj̈́hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjʄhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj#hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const unsigned long j`` jiffies value **Return** nanoseconds valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j?)}(hjh]hconst unsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(hnanoseconds valueh]hnanoseconds value}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmsecs_to_jiffies (C function)c.msecs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned long msecs_to_jiffies (const unsigned int m)h]h)}(h4unsigned long msecs_to_jiffies(const unsigned int m)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hmsecs_to_jiffiesh]h)}(hmsecs_to_jiffiesh]hmsecs_to_jiffies}(hj˅hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDžubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(const unsigned int m)h]j&)}(hconst unsigned int mh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmh]hm}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj߅ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j_)}(hhh]jp)}(hconvert milliseconds to jiffiesh]j9)}(hjih]hconvert milliseconds to jiffies}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjgubah}(h]h ]h"]h$]h&]uh1johjdhhhjxhNubah}(h]h ]h"]h$]h&]j_j_uh1j_hjxhMhjahhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const unsigned int m`` time in milliseconds **Description** conversion is done as follows: - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) - 'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. - all other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies() msecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _msecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible. **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]j?)}(hjh]hconst unsigned int m}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j9)}(htime in millisecondsh]htime in milliseconds}(hjІhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj̆hMhj͆ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̆hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(hconversion is done as follows:h]hconversion is done as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj_)}(hhh](jp)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]j9)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j9)}(hj'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.h]hr‘too large’ values [that would result in larger than MAX_JIFFY_OFFSET values] mean ‘infinite timeout’ too.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj3ubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies() h]j9)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies()h]hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies()}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjLubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_j_uh1j_hj,hMhjubj9)}(hXmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _msecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.h]hXmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _msecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj9)}(h **Return**h]jz)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM'hjubj9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsecs_to_jiffies (C macro)c.secs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]h)}(hjh]hsecs_to_jiffies}(hjŇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj؇hM6ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj؇hM6hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj؇hM6ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubj9)}(h``secs_to_jiffies (_secs)``h]j?)}(hjh]hsecs_to_jiffies (_secs)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hjehhubjU)}(h- convert seconds to jiffies h]j_)}(hhh]jp)}(hconvert seconds to jiffies h]j9)}(hconvert seconds to jiffiesh]hconvert seconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6hjubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]j_j_uh1j_hj&hM6hj ubah}(h]h ]h"]h$]h&]uh1jThj&hM6hjehhubjp)}(hX**Parameters** ``_secs`` time in seconds **Description** Conversion is done by simple multiplication with HZ secs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers. **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM:hj9ubj)}(hhh]j)}(h``_secs`` time in seconds h](j)}(h ``_secs``h]j?)}(hj^h]h_secs}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM7hjXubj)}(hhh]j9)}(htime in secondsh]htime in seconds}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshM7hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM7hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM9hj9ubj9)}(h3Conversion is done by simple multiplication with HZh]h3Conversion is done by simple multiplication with HZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM8hj9ubj9)}(hvsecs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers.h]hvsecs_to_jiffies() is defined as a macro rather than a static inline function so it can be used in static initializers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM:hj9ubj9)}(h **Return**h]jz)}(hjψh]hReturn}(hjшhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj͈ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM=hj9ubj9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM>hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌusecs_to_jiffies (C function)c.usecs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned long usecs_to_jiffies (const unsigned int u)h]h)}(h4unsigned long usecs_to_jiffies(const unsigned int u)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMQubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj"hMQubj)}(hlongh]hlong}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMQubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj"hMQubh)}(husecs_to_jiffiesh]h)}(husecs_to_jiffiesh]husecs_to_jiffies}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hMQubj )}(h(const unsigned int u)h]j&)}(hconst unsigned int uh](j+)}(hj<*h]hconst}(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(huh]hu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj"hMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj"hMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj"hMQhj hhubj )}(hhh]j_)}(hhh]jp)}(hconvert microseconds to jiffiesh]j9)}(hjh]hconvert microseconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMQhjubah}(h]h ]h"]h$]h&]uh1johjhhhjhNubah}(h]h ]h"]h$]h&]j_j_uh1j_hjhMQhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hXi**Parameters** ``const unsigned int u`` time in microseconds **Description** conversion is done as follows: - 'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. - all other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows as for msecs_to_jiffies. usecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __usecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _usecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible. **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMUhjubj)}(hhh]j)}(h.``const unsigned int u`` time in microseconds h](j)}(h``const unsigned int u``h]j?)}(hj=h]hconst unsigned int u}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMRhj7ubj)}(hhh]j9)}(htime in microsecondsh]htime in microseconds}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMRhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMRhj4ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMThjubj9)}(hconversion is done as follows:h]hconversion is done as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMShjubj_)}(hhh](jp)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j9)}(hj'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.h]hr‘too large’ values [that would result in larger than MAX_JIFFY_OFFSET values] mean ‘infinite timeout’ too.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMUhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows as for msecs_to_jiffies. h]j9)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows as for msecs_to_jiffies.h]hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows as for msecs_to_jiffies.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMXhjubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_j_uh1j_hjhMUhjubj9)}(hXusecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __usecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _usecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.h]hXusecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code. __usecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The HZ range specific helpers _usecs_to_jiffies() are called both directly here and from __msecs_to_jiffies() in the case where constant folding is not possible.}(hj؊hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM\hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMehjubj9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_msecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_msecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*hhhj<hMrubj)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj<hMrubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*hhhj<hMrubh)}(hjiffies_to_msecsh]h)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*hhhj<hMrubj )}(h(const unsigned long j)h]j&)}(hconst unsigned long jh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj̋hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjڋhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj*hhhj<hMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj<hMrubah}(h]h ](jjeh"]h$]h&]jj)jhuh1hhj<hMrhj#hhubj )}(hhh]j9)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrhjhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj<hMrubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** milliseconds valueh](j9)}(h**Parameters**h]jz)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMvhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j?)}(hjDh]hconst unsigned long j}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMshj>ubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhMshjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMshj;ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjubj9)}(hmilliseconds valueh]hmilliseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_usecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_usecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjӌhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjҌhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjҌhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjҌhMubh)}(hjiffies_to_usecsh]h)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjҌhMubj )}(h(const unsigned long j)h]j&)}(hconst unsigned long jh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjҌhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjҌhMubah}(h]h ](jjeh"]h$]h&]jj)jhuh1hhjҌhMhjhhubj )}(hhh]j9)}(hConvert jiffies to microsecondsh]hConvert jiffies to microseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjҌhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]j?)}(hjڍh]hconst unsigned long j}(hj܍hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj؍ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjԍubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԍubeh}(h]h ]h"]h$]h&]uh1jhjhMhjэubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(hmicroseconds valueh]hmicroseconds value}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmktime64 (C function) c.mktime64hNtauh1hhjehhhNhNubh)}(hhh](h)}(htime64_t mktime64 (const unsigned int year0, const unsigned int mon0, const unsigned int day, const unsigned int hour, const unsigned int min, const unsigned int sec)h]h)}(htime64_t mktime64(const unsigned int year0, const unsigned int mon0, const unsigned int day, const unsigned int hour, const unsigned int min, const unsigned int sec)h](h)}(hhh]h)}(htime64_th]htime64_t}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj_modnameN classnameNjcjf)}ji]jl)}j_mktime64sb c.mktime64asbuh1hhjVhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjVhhhj~hMubh)}(hmktime64h]h)}(hj{h]hmktime64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhj~hMubj )}(h(const unsigned int year0, const unsigned int mon0, const unsigned int day, const unsigned int hour, const unsigned int min, const unsigned int sec)h](j&)}(hconst unsigned int year0h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjǎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjՎhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hyear0h]hyear0}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst unsigned int mon0h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmon0h]hmon0}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst unsigned int dayh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjɏhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hdayh]hday}(hj׏hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst unsigned int hourh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhourh]hhour}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst unsigned int minh](j+)}(hj<*h]hconst}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjXubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubj)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubh)}(hminh]hmin}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst unsigned int sech](j+)}(hj<*h]hconst}(hjȐhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjĐubj=)}(h h]h }(hjՐhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjĐubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĐubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjĐubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĐubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjĐubh)}(hsech]hsec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĐubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjVhhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhj~hMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhj~hMhjOhhubj )}(hhh]j9)}(hConverts date to seconds.h]hConverts date to seconds.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhj~hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const unsigned int year0`` year to convert ``const unsigned int mon0`` month to convert ``const unsigned int day`` day to convert ``const unsigned int hour`` hour to convert ``const unsigned int min`` minute to convert ``const unsigned int sec`` second to convert **Description** Converts Gregorian date to seconds since 1970-01-01 00:00:00. Assumes input in normal date format, i.e. 1980-12-31 23:59:59 => year=1980, mon=12, day=31, hour=23, min=59, sec=59. [For the Julian calendar (which was used in Russia before 1917, Britain & colonies before 1752, anywhere else before 1582, and is still in use by some communities) leave out the -year/100+year/400 terms, and add 10.] This algorithm was first published by Gauss (I think). A leap second can be indicated by calling this function with sec as 60 (allowable under ISO 8601). The leap second is treated the same as the following second since they don't exist in UNIX time. An encoding of midnight at the end of the day as 24:00:00 - ie. midnight tomorrow - (allowable under ISO 8601) is supported. **Return** seconds since the epoch time for the given input dateh](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj)}(hhh](j)}(h-``const unsigned int year0`` year to convert h](j)}(h``const unsigned int year0``h]j?)}(hjh]hconst unsigned int year0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hyear to converth]hyear to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubj)}(h-``const unsigned int mon0`` month to convert h](j)}(h``const unsigned int mon0``h]j?)}(hjh]hconst unsigned int mon0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hmonth to converth]hmonth to convert}(hjؑhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjԑhMhjՑubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԑhMhj}ubj)}(h*``const unsigned int day`` day to convert h](j)}(h``const unsigned int day``h]j?)}(hjh]hconst unsigned int day}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hday to converth]hday to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj}ubj)}(h,``const unsigned int hour`` hour to convert h](j)}(h``const unsigned int hour``h]j?)}(hj1h]hconst unsigned int hour}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj+ubj)}(hhh]j9)}(hhour to converth]hhour to convert}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj}ubj)}(h-``const unsigned int min`` minute to convert h](j)}(h``const unsigned int min``h]j?)}(hjjh]hconst unsigned int min}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjdubj)}(hhh]j9)}(hminute to converth]hminute to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubj)}(h-``const unsigned int sec`` second to convert h](j)}(h``const unsigned int sec``h]j?)}(hjh]hconst unsigned int sec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hsecond to converth]hsecond to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hjޒh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܒubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(hConverts Gregorian date to seconds since 1970-01-01 00:00:00. Assumes input in normal date format, i.e. 1980-12-31 23:59:59 => year=1980, mon=12, day=31, hour=23, min=59, sec=59.h]hConverts Gregorian date to seconds since 1970-01-01 00:00:00. Assumes input in normal date format, i.e. 1980-12-31 23:59:59 => year=1980, mon=12, day=31, hour=23, min=59, sec=59.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(h[For the Julian calendar (which was used in Russia before 1917, Britain & colonies before 1752, anywhere else before 1582, and is still in use by some communities) leave out the -year/100+year/400 terms, and add 10.]h]h[For the Julian calendar (which was used in Russia before 1917, Britain & colonies before 1752, anywhere else before 1582, and is still in use by some communities) leave out the -year/100+year/400 terms, and add 10.]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(h6This algorithm was first published by Gauss (I think).h]h6This algorithm was first published by Gauss (I think).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(hA leap second can be indicated by calling this function with sec as 60 (allowable under ISO 8601). The leap second is treated the same as the following second since they don't exist in UNIX time.h]hA leap second can be indicated by calling this function with sec as 60 (allowable under ISO 8601). The leap second is treated the same as the following second since they don’t exist in UNIX time.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(h|An encoding of midnight at the end of the day as 24:00:00 - ie. midnight tomorrow - (allowable under ISO 8601) is supported.h]h|An encoding of midnight at the end of the day as 24:00:00 - ie. midnight tomorrow - (allowable under ISO 8601) is supported.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj9)}(h5seconds since the epoch time for the given input dateh]h5seconds since the epoch time for the given input date}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&set_normalized_timespec64 (C function)c.set_normalized_timespec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hNvoid set_normalized_timespec64 (struct timespec64 *ts, time64_t sec, s64 nsec)h]h)}(hMvoid set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 nsec)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hset_normalized_timespec64h]h)}(hset_normalized_timespec64h]hset_normalized_timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h/(struct timespec64 *ts, time64_t sec, s64 nsec)h](j&)}(hstruct timespec64 *tsh](j+)}(hj.h]hstruct}(hjÓhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjГhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޓubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.set_normalized_timespec64asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htsh]hts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h time64_t sech](h)}(hhh]h)}(htime64_th]htime64_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jc.set_normalized_timespec64asbuh1hhj1ubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1ubh)}(hsech]hsec}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 nsech](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.set_normalized_timespec64asbuh1hhjyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubh)}(hnsech]hnsec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj{hhubj )}(hhh]j9)}(h-set timespec sec and nsec parts and normalizeh]h-set timespec sec and nsec parts and normalize}(hj֔hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjӔhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timespec64 *ts`` pointer to timespec variable to be set ``time64_t sec`` seconds to set ``s64 nsec`` nanoseconds to set **Description** Set seconds and nanoseconds field of a timespec variable and normalize to the timespec storage format **Note** The tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC. For negative values only the tv_sec field is negative !h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hA``struct timespec64 *ts`` pointer to timespec variable to be set h](j)}(h``struct timespec64 *ts``h]j?)}(hjh]hstruct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(h&pointer to timespec variable to be seth]h&pointer to timespec variable to be set}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h ``time64_t sec`` seconds to set h](j)}(h``time64_t sec``h]j?)}(hjPh]h time64_t sec}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjJubj)}(hhh]j9)}(hseconds to seth]hseconds to set}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubj)}(h ``s64 nsec`` nanoseconds to set h](j)}(h ``s64 nsec``h]j?)}(hjh]hs64 nsec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hnanoseconds to seth]hnanoseconds to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjĕh]h Description}(hjƕhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj•ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(heSet seconds and nanoseconds field of a timespec variable and normalize to the timespec storage formath]heSet seconds and nanoseconds field of a timespec variable and normalize to the timespec storage format}(hjڕhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h**Note**h]jz)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(hThe tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC. For negative values only the tv_sec field is negative !h]hThe tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC. For negative values only the tv_sec field is negative !}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌns_to_timespec64 (C function)c.ns_to_timespec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(h-struct timespec64 ns_to_timespec64 (s64 nsec)h]h)}(h,struct timespec64 ns_to_timespec64(s64 nsec)h](j+)}(hj.h]hstruct}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj=hMubh)}(hhh]h)}(h timespec64h]h timespec64}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jl)}j_ns_to_timespec64sbc.ns_to_timespec64asbuh1hhj,hhhj=hMubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj=hMubh)}(hns_to_timespec64h]h)}(hjmh]hns_to_timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj=hMubj )}(h (s64 nsec)h]j&)}(hs64 nsech](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jkc.ns_to_timespec64asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnsech]hnsec}(hj̖hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj,hhhj=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj=hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj=hMhj%hhubj )}(hhh]j9)}(h!Convert nanoseconds to timespec64h]h!Convert nanoseconds to timespec64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj=hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``s64 nsec`` the nanoseconds value to be converted **Return** the timespec64 representation of the nsec parameter.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h3``s64 nsec`` the nanoseconds value to be converted h](j)}(h ``s64 nsec``h]j?)}(hj7h]hs64 nsec}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj1ubj)}(hhh]j9)}(h%the nanoseconds value to be convertedh]h%the nanoseconds value to be converted}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h4the timespec64 representation of the nsec parameter.h]h4the timespec64 representation of the nsec parameter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__msecs_to_jiffies (C function)c.__msecs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h7unsigned long __msecs_to_jiffies (const unsigned int m)h]h)}(h6unsigned long __msecs_to_jiffies(const unsigned int m)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjƗhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjŗhMubj)}(hlongh]hlong}(hjԗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjŗhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjŗhMubh)}(h__msecs_to_jiffiesh]h)}(h__msecs_to_jiffiesh]h__msecs_to_jiffies}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjŗhMubj )}(h(const unsigned int m)h]j&)}(hconst unsigned int mh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hunsignedh]hunsigned}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hj<h]hm}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjŗhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjŗhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjŗhMhjhhubj )}(hhh]j_)}(hhh]jp)}(hconvert milliseconds to jiffiesh]j9)}(hjh]hconvert milliseconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubah}(h]h ]h"]h$]h&]uh1johjhhhjhNubah}(h]h ]h"]h$]h&]j_j_uh1j_hjhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjŗhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const unsigned int m`` time in milliseconds **Description** conversion is done as follows: - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) - 'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. - all other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies() msecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code, __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The _msecs_to_jiffies helpers are the HZ dependent conversion routines found in include/linux/jiffies.h **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj˜hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM!hjubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]j?)}(hjߘh]hconst unsigned int m}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjݘubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj٘ubj)}(hhh]j9)}(htime in millisecondsh]htime in milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj٘ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj֘ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjubj9)}(hconversion is done as follows:h]hconversion is done as follows:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj_)}(hhh](jp)}(h;negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET) h]j9)}(h:negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)h]h>negative values mean ‘infinite timeout’ (MAX_JIFFY_OFFSET)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM!hjBubah}(h]h ]h"]h$]h&]uh1johj?ubjp)}(hk'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too. h]j9)}(hj'too large' values [that would result in larger than MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.h]hr‘too large’ values [that would result in larger than MAX_JIFFY_OFFSET values] mean ‘infinite timeout’ too.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM#hj[ubah}(h]h ]h"]h$]h&]uh1johj?ubjp)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies() h]j9)}(hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies()h]hall other values are converted to jiffies by either multiplying the input value by a factor or dividing it with a factor and handling any 32-bit overflows. for the details see _msecs_to_jiffies()}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM&hjtubah}(h]h ]h"]h$]h&]uh1johj?ubeh}(h]h ]h"]h$]h&]j_j_uh1j_hjThM!hjubj9)}(hXwmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code, __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The _msecs_to_jiffies helpers are the HZ dependent conversion routines found in include/linux/jiffies.hh]hXwmsecs_to_jiffies() checks for the passed in value being a constant via __builtin_constant_p() allowing gcc to eliminate most of the code, __msecs_to_jiffies() is called if the value passed does not allow constant folding and the actual conversion must be done at runtime. The _msecs_to_jiffies helpers are the HZ dependent conversion routines found in include/linux/jiffies.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM+hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM3hjubj9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__usecs_to_jiffies (C function)c.__usecs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h7unsigned long __usecs_to_jiffies (const unsigned int u)h]h)}(h6unsigned long __usecs_to_jiffies(const unsigned int u)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMBubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMBubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMBubh)}(h__usecs_to_jiffiesh]h)}(h__usecs_to_jiffiesh]h__usecs_to_jiffies}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMBubj )}(h(const unsigned int u)h]j&)}(hconst unsigned int uh](j+)}(hj<*h]hconst}(hjBhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubj=)}(h h]h }(hjOhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubj)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubj)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hj‰h]hu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMBubah}(h]jܙah ](jjeh"]h$]h&]jj)jhuh1hhjhMBhjޙhhubj )}(hhh]j_)}(hhh]jp)}(hconvert microseconds to jiffiesh]j9)}(hjÚh]hconvert microseconds to jiffies}(hjŚhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhjubah}(h]h ]h"]h$]h&]uh1johjhhhjҚhNubah}(h]h ]h"]h$]h&]j_j_uh1j_hjҚhMBhjhhubah}(h]h ]h"]h$]h&]uh1jhjޙhhhjhMBubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hZ**Parameters** ``const unsigned int u`` time in milliseconds **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMFhjubj)}(hhh]j)}(h.``const unsigned int u`` time in milliseconds h](j)}(h``const unsigned int u``h]j?)}(hjh]hconst unsigned int u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChj ubj)}(hhh]j9)}(htime in millisecondsh]htime in milliseconds}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMChj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMChjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMEhjubj9)}(h jiffies valueh]h jiffies value}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"timespec64_to_jiffies (C function)c.timespec64_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(hDunsigned long timespec64_to_jiffies (const struct timespec64 *value)h]h)}(hCunsigned long timespec64_to_jiffies(const struct timespec64 *value)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMPubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMPubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMPubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMPubh)}(htimespec64_to_jiffiesh]h)}(htimespec64_to_jiffiesh]htimespec64_to_jiffies}(hjΛhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʛubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMPubj )}(h (const struct timespec64 *value)h]j&)}(hconst struct timespec64 *valueh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%modnameN classnameNjcjf)}ji]jl)}j_jЛsbc.timespec64_to_jiffiesasbuh1hhjubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hvalueh]hvalue}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMPubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMPubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMPhjhhubj )}(hhh]j9)}(h%convert a timespec64 value to jiffiesh]h%convert a timespec64 value to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMPhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMPubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const struct timespec64 *value`` pointer to :c:type:`struct timespec64 ` **Description** The TICK_NSEC - 1 rounds up the value to the next resolution. Note that a remainder subtract here would not do the right thing as the resolution values don't fall on second boundaries. I.e. the line: nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding. Note that due to the small error in the multiplier here, this rounding is incorrect for sufficiently large values of tv_nsec, but well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're OK. Rather, we just shift the bits off the right. The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec value to a scaled second value. **Return** jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMThjubj)}(hhh]j)}(hW``const struct timespec64 *value`` pointer to :c:type:`struct timespec64 ` h](j)}(h"``const struct timespec64 *value``h]j?)}(hjɜh]hconst struct timespec64 *value}(hj˜hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjǜubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMQhjÜubj)}(hhh]j9)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhjޜhMQhjubeh}(h]h ]h"]h$]h&]uh1j8hjޜhMQhjߜubah}(h]h ]h"]h$]h&]uh1jhjÜubeh}(h]h ]h"]h$]h&]uh1jhjޜhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMShjubj9)}(hXThe TICK_NSEC - 1 rounds up the value to the next resolution. Note that a remainder subtract here would not do the right thing as the resolution values don't fall on second boundaries. I.e. the line: nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding. Note that due to the small error in the multiplier here, this rounding is incorrect for sufficiently large values of tv_nsec, but well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we're OK.h]hXThe TICK_NSEC - 1 rounds up the value to the next resolution. Note that a remainder subtract here would not do the right thing as the resolution values don’t fall on second boundaries. I.e. the line: nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding. Note that due to the small error in the multiplier here, this rounding is incorrect for sufficiently large values of tv_nsec, but well formed timespecs should have tv_nsec < NSEC_PER_SEC, so we’re OK.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMRhjubj9)}(h-Rather, we just shift the bits off the right.h]h-Rather, we just shift the bits off the right.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hjubj9)}(h`The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec value to a scaled second value.h]h`The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec value to a scaled second value.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hjubj9)}(h **Return**h]jz)}(hjhh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`hjubj9)}(h jiffies valueh]h jiffies value}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"jiffies_to_timespec64 (C function)c.jiffies_to_timespec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hRvoid jiffies_to_timespec64 (const unsigned long jiffies, struct timespec64 *value)h]h)}(hQvoid jiffies_to_timespec64(const unsigned long jiffies, struct timespec64 *value)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMuubh)}(hjiffies_to_timespec64h]h)}(hjiffies_to_timespec64h]hjiffies_to_timespec64}(hjΝhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʝubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMuubj )}(h7(const unsigned long jiffies, struct timespec64 *value)h](j&)}(hconst unsigned long jiffiesh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjiffiesh]hjiffies}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct timespec64 *valueh](j+)}(hj.h]hstruct}(hjVhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjRubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubh)}(hhh]h)}(h timespec64h]h timespec64}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjvmodnameN classnameNjcjf)}ji]jl)}j_jНsbc.jiffies_to_timespec64asbuh1hhjRubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMuhjhhubj )}(hhh]j9)}(hAconvert jiffies value to :c:type:`struct timespec64 `h](hconvert jiffies value to }(hjٞhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]jc.jiffies_to_timespec64asbj timespec64uh1hhj<hMrhjٞubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhj֞hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``const unsigned long jiffies`` jiffies value ``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMyhjubj)}(hhh](j)}(h.``const unsigned long jiffies`` jiffies value h](j)}(h``const unsigned long jiffies``h]j?)}(hj>h]hconst unsigned long jiffies}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMvhj8ubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMvhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMvhj5ubj)}(hP``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `h](j)}(h``struct timespec64 *value``h]j?)}(hjwh]hstruct timespec64 *value}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMxhjqubj)}(hhh]j9)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMwhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMxhj5ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies_to_clock_t (C function)c.jiffies_to_clock_thNtauh1hhjehhhNhNubh)}(hhh](h)}(h,clock_t jiffies_to_clock_t (unsigned long x)h]h)}(h+clock_t jiffies_to_clock_t(unsigned long x)h](h)}(hhh]h)}(hclock_th]hclock_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jiffies_to_clock_tsbc.jiffies_to_clock_tasbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hjiffies_to_clock_th]h)}(hjh]hjiffies_to_clock_t}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(unsigned long x)h]j&)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubj)}(hlongh]hlong}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hjbh]hx}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hConvert jiffies to clock_th]hConvert jiffies to clock_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hn**Parameters** ``unsigned long x`` jiffies value **Return** jiffies converted to clock_t (CLOCKS_PER_SEC)h](j9)}(h**Parameters**h]jz)}(hjŠh]h Parameters}(hjǠhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjàubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h"``unsigned long x`` jiffies value h](j)}(h``unsigned long x``h]j?)}(hjh]hunsigned long x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjޠubj)}(hhh]j9)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjޠubeh}(h]h ]h"]h$]h&]uh1jhjhMhj۠ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h-jiffies converted to clock_t (CLOCKS_PER_SEC)h]h-jiffies converted to clock_t (CLOCKS_PER_SEC)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌclock_t_to_jiffies (C function)c.clock_t_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h2unsigned long clock_t_to_jiffies (unsigned long x)h]h)}(h1unsigned long clock_t_to_jiffies(unsigned long x)h](j)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhjrhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhjrhMubh)}(hclock_t_to_jiffiesh]h)}(hclock_t_to_jiffiesh]hclock_t_to_jiffies}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjrhMubj )}(h(unsigned long x)h]j&)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjˡhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hj١hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjbh]hx}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1hhjrhMhjYhhubj )}(hhh]j9)}(hConvert clock_t to jiffiesh]hConvert clock_t to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhjehNhNubjp)}(hc**Parameters** ``unsigned long x`` clock_t value **Return** clock_t value converted to jiffiesh](j9)}(h**Parameters**h]jz)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj:ubj)}(hhh]j)}(h"``unsigned long x`` clock_t value h](j)}(h``unsigned long x``h]j?)}(hj_h]hunsigned long x}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjYubj)}(hhh]j9)}(h clock_t valueh]h clock_t value}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj:ubj9)}(h"clock_t value converted to jiffiesh]h"clock_t value converted to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"jiffies_64_to_clock_t (C function)c.jiffies_64_to_clock_thNtauh1hhjehhhNhNubh)}(hhh](h)}(h)notrace u64 jiffies_64_to_clock_t (u64 x)h]h)}(h(notrace u64 jiffies_64_to_clock_t(u64 x)h](hnotrace}(hjۢhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjۢhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubh)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jiffies_64_to_clock_tsbc.jiffies_64_to_clock_tasbuh1hhjۢhhhjhMubj=) }(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjۢhhhjhMubh)}(hjiffies_64_to_clock_th]h)}(hjh]hjiffies_64_to_clock_t}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjۢhhhjhMubj )}(h(u64 x)h]j&)}(hu64 xh](h)}(hhh]h)}(hu64h]hu64}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjHmodnameN classnameNjcjf)}ji]jc.jiffies_64_to_clock_tasbuh1hhj?ubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(hjbh]hx}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj;ubah}(h]h ]h"]h$]h&]jj uh1jhjۢhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjעhhhjhMubah}(h]jҢah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjԢhhubj )}(hhh]j9)}(hConvert jiffies_64 to clock_th]hConvert jiffies_64 to clock_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjԢhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hy**Parameters** ``u64 x`` jiffies_64 value **Return** jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h``u64 x`` jiffies_64 value h](j)}(h ``u64 x``h]j?)}(hjܣh]hu64 x}(hjޣhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjڣubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj֣ubj)}(hhh]j9)}(hjiffies_64 valueh]hjiffies_64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֣ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjӣubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h?jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)h]hCjiffies_64 value converted to 64-bit “clock_t” (CLOCKS_PER_SEC)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies64_to_nsecs (C function)c.jiffies64_to_nsecshNtauh1hhjehhhNhNubh)}(hhh](h)}(hu64 jiffies64_to_nsecs (u64 j)h]h)}(hu64 jiffies64_to_nsecs(u64 j)h](h)}(hhh]h)}(hu64h]hu64}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjamodnameN classnameNjcjf)}ji]jl)}j_jiffies64_to_nsecssbc.jiffies64_to_nsecsasbuh1hhjXhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXhhhjhMubh)}(hjiffies64_to_nsecsh]h)}(hj}h]hjiffies64_to_nsecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjXhhhjhMubj )}(h(u64 j)h]j&)}(hu64 jh](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j{c.jiffies64_to_nsecsasbuh1hhjubj=)}(h h]h }(hjϤhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjݤhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjXhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjThhhjhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjQhhubj )}(hhh]j9)}(h Convert jiffies64 to nanosecondsh]h Convert jiffies64 to nanoseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hJ**Parameters** ``u64 j`` jiffies64 value **Return** nanoseconds valueh](j9)}(h**Parameters**h]jz)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj"ubj)}(hhh]j)}(h``u64 j`` jiffies64 value h](j)}(h ``u64 j``h]j?)}(hjGh]hu64 j}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjAubj)}(hhh]j9)}(hjiffies64 valueh]hjiffies64 value}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj"ubj9)}(hnanoseconds valueh]hnanoseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌjiffies64_to_msecs (C function)c.jiffies64_to_msecshNtauh1hhjehhhNhNubh)}(hhh](h)}(h$u64 jiffies64_to_msecs (const u64 j)h]h)}(h#u64 jiffies64_to_msecs(const u64 j)h](h)}(hhh]h)}(hu64h]hu64}(hjʥhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǥubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj̥modnameN classnameNjcjf)}ji]jl)}j_jiffies64_to_msecssbc.jiffies64_to_msecsasbuh1hhjåhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjåhhhjhMubh)}(hjiffies64_to_msecsh]h)}(hjh]hjiffies64_to_msecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjåhhhjhMubj )}(h (const u64 j)h]j&)}(h const u64 jh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hu64h]hu64}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9modnameN classnameNjcjf)}ji]jc.jiffies64_to_msecsasbuh1hhjubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjåhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h!Convert jiffies64 to millisecondsh]h!Convert jiffies64 to milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hQ**Parameters** ``const u64 j`` jiffies64 value **Return** milliseconds valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j)}(h ``const u64 j`` jiffies64 value h](j)}(h``const u64 j``h]j?)}(hjͦh]h const u64 j}(hjϦhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj˦ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjǦubj)}(hhh]j9)}(hjiffies64 valueh]hjiffies64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǦubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĦubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(hmilliseconds valueh]hmilliseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnsecs_to_jiffies64 (C function)c.nsecs_to_jiffies64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hu64 nsecs_to_jiffies64 (u64 n)h]h)}(hu64 nsecs_to_jiffies64(u64 n)h](h)}(hhh]h)}(hu64h]hu64}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjRmodnameN classnameNjcjf)}ji]jl)}j_nsecs_to_jiffies64sbc.nsecs_to_jiffies64asbuh1hhjIhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhjqhM ubh)}(hnsecs_to_jiffies64h]h)}(hjnh]hnsecs_to_jiffies64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjqhM ubj )}(h(u64 n)h]j&)}(hu64 nh](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jlc.nsecs_to_jiffies64asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]hn}(hjΧhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjIhhhjqhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjqhM ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhjqhM hjBhhubj )}(hhh]j9)}(h!Convert nsecs in u64 to jiffies64h]h!Convert nsecs in u64 to jiffies64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjqhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``u64 n`` nsecs in u64 **Description** Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn't return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value. **note** NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years **Return** nsecs converted to jiffies64 valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]j?)}(hj8h]hu64 n}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hj2ubj)}(hhh]j9)}(h nsecs in u64h]h nsecs in u64}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhM hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM hj/ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjubj9)}(hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn't return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.h]hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn’t return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjubj9)}(h**note**h]jz)}(hjh]hnote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjU)}(hqNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years h]j9)}(hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 yearsh]hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubah}(h]h ]h"]h$]h&]uh1jThj¨hMhjubj9)}(h **Return**h]jz)}(hj˨h]hReturn}(hjͨhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjɨubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h"nsecs converted to jiffies64 valueh]h"nsecs converted to jiffies64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌnsecs_to_jiffies (C function)c.nsecs_to_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h&unsigned long nsecs_to_jiffies (u64 n)h]h)}(h%unsigned long nsecs_to_jiffies(u64 n)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM*ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhM*ubj)}(hlongh]hlong}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM*ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhM*ubh)}(hnsecs_to_jiffiesh]h)}(hnsecs_to_jiffiesh]hnsecs_to_jiffies}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhM*ubj )}(h(u64 n)h]j&)}(hu64 nh](h)}(hhh]h)}(hu64h]hu64}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_jOsbc.nsecs_to_jiffiesasbuh1hhjeubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hhh]hn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubah}(h]h ]h"]h$]h&]jj uh1jhj hhhjhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM*ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM*hjhhubj )}(hhh]j9)}(hConvert nsecs in u64 to jiffiesh]hConvert nsecs in u64 to jiffies}(hjéhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM*ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j۩j4j۩j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``u64 n`` nsecs in u64 **Description** Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn't return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value. **note** NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years **Return** nsecs converted to jiffies valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM.hjߩubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]j?)}(hjh]hu64 n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM,hjubj)}(hhh]j9)}(h nsecs in u64h]h nsecs in u64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjߩubj9)}(h**Description**h]jz)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM.hjߩubj9)}(hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn't return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.h]hUnlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. And this doesn’t return MAX_JIFFY_OFFSET since this function is designed for scheduler, not for use in device drivers to calculate timeout value.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM-hjߩubj9)}(h**note**h]jz)}(hjfh]hnote}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM1hjߩubjU)}(hqNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years h]j9)}(hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 yearsh]hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM2hj|ubah}(h]h ]h"]h$]h&]uh1jThjhM2hjߩubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM5hjߩubj9)}(h nsecs converted to jiffies valueh]h nsecs converted to jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM6hjߩubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ timespec64_add_safe (C function)c.timespec64_add_safehNtauh1hhjehhhNhNubh)}(hhh](h)}(h`struct timespec64 timespec64_add_safe (const struct timespec64 lhs, const struct timespec64 rhs)h]h)}(h_struct timespec64 timespec64_add_safe(const struct timespec64 lhs, const struct timespec64 rhs)h](j+)}(hj.h]hstruct}(hjܪhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjتhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM?ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjتhhhjhM?ubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_timespec64_add_safesbc.timespec64_add_safeasbuh1hhjتhhhjhM?ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjتhhhjhM?ubh)}(htimespec64_add_safeh]h)}(hjh]htimespec64_add_safe}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjتhhhjhM?ubj )}(h:(const struct timespec64 lhs, const struct timespec64 rhs)h](j&)}(hconst struct timespec64 lhsh](j+)}(hj<*h]hconst}(hjIhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubj+)}(hj.h]hstruct}(hjdhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjEubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.timespec64_add_safeasbuh1hhjEubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubh)}(hlhsh]hlhs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubj&)}(hconst struct timespec64 rhsh](j+)}(hj<*h]hconst}(hjǫhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjëubj=)}(h h]h }(hjԫhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjëubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjëubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjëubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.timespec64_add_safeasbuh1hhjëubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjëubh)}(hrhsh]hrhs}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjëubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubeh}(h]h ]h"]h$]h&]jj uh1jhjتhhhjhM?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjԪhhhjhM?ubah}(h]jϪah ](jjeh"]h$]h&]jj)jhuh1hhjhM?hjѪhhubj )}(hhh]j9)}(h=Add two timespec64 values and do a safety check for overflow.h]h=Add two timespec64 values and do a safety check for overflow.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM?hjShhubah}(h]h ]h"]h$]h&]uh1jhjѪhhhjhM?ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jnj4jnj5j6j7uh1hhhhjehNhNubjp)}(hX(**Parameters** ``const struct timespec64 lhs`` first (left) timespec64 to add ``const struct timespec64 rhs`` second (right) timespec64 to add **Description** It's assumed that both values are valid (>= 0). And, each timespec64 is in normalized form. **Return** sum of **lhs** + **rhs**h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChjrubj)}(hhh](j)}(h?``const struct timespec64 lhs`` first (left) timespec64 to add h](j)}(h``const struct timespec64 lhs``h]j?)}(hjh]hconst struct timespec64 lhs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMAhjubj)}(hhh]j9)}(hfirst (left) timespec64 to addh]hfirst (left) timespec64 to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubj)}(hA``const struct timespec64 rhs`` second (right) timespec64 to add h](j)}(h``const struct timespec64 rhs``h]j?)}(hjЬh]hconst struct timespec64 rhs}(hjҬhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjάubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhjʬubj)}(hhh]j9)}(h second (right) timespec64 to addh]h second (right) timespec64 to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjʬubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubeh}(h]h ]h"]h$]h&]uh1jhjrubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMDhjrubj9)}(h[It's assumed that both values are valid (>= 0). And, each timespec64 is in normalized form.h]h]It’s assumed that both values are valid (>= 0). And, each timespec64 is in normalized form.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChjrubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMFhjrubj9)}(hsum of **lhs** + **rhs**h](hsum of }(hjHhhhNhNubjz)}(h**lhs**h]hlhs}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh + }(hjHhhhNhNubjz)}(h**rhs**h]hrhs}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMGhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_timespec64 (C function)c.get_timespec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hVint get_timespec64 (struct timespec64 *ts, const struct __kernel_timespec __user *uts)h]h)}(hUint get_timespec64(struct timespec64 *ts, const struct __kernel_timespec __user *uts)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM[ubh)}(hget_timespec64h]h)}(hget_timespec64h]hget_timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM[ubj )}(hC(struct timespec64 *ts, const struct __kernel_timespec __user *uts)h](j&)}(hstruct timespec64 *tsh](j+)}(hj.h]hstruct}(hjԭhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjЭubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjЭubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.get_timespec64asbuh1hhjЭubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjЭubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЭubh)}(htsh]hts}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjЭubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj̭ubj&)}(h*const struct __kernel_timespec __user *utsh](j+)}(hj<*h]hconst}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjBubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubj+)}(hj.h]hstruct}(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjBubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.get_timespec64asbuh1hhjBubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh__user}(hjBhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hutsh]huts}(hjʮhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj̭ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM[ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM[hjhhubj )}(hhh]j9)}(h'get user's time value into kernel spaceh]h)get user’s time value into kernel space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM[ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjehNhNubjp)}(hXE**Parameters** ``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` ``const struct __kernel_timespec __user *uts`` user's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>` **Description** Handles compat or 32-bit modes. **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM_hjubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]j?)}(hj5h]hstruct timespec64 *ts}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM\hj/ubj)}(hhh]j9)}(h4destination :c:type:`struct timespec64 `h](h destination }(hjNhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hjXh]hstruct timespec64}(hjZhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhjJhM\hjNubeh}(h]h ]h"]h$]h&]uh1j8hjJhM\hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM\hj,ubj)}(h{``const struct __kernel_timespec __user *uts`` user's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>` h](j)}(h.``const struct __kernel_timespec __user *uts``h]j?)}(hjh]h*const struct __kernel_timespec __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hjubj)}(hhh]j9)}(hKuser's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>`h](huser’s time value as }(hjhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]j?)}(hjh]hstruct __kernel_timespec}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj__kernel_timespecuh1hhjhM]hjubeh}(h]h ]h"]h$]h&]uh1j8hjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM_hjubj9)}(hHandles compat or 32-bit modes.h]hHandles compat or 32-bit modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM^hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`hjubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_timespec64 (C function)c.put_timespec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(hVint put_timespec64 (const struct timespec64 *ts, struct __kernel_timespec __user *uts)h]h)}(hUint put_timespec64(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{ubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOhhhjahM{ubh)}(hput_timespec64h]h)}(hput_timespec64h]hput_timespec64}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjahM{ubj )}(hC(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j&)}(hconst struct timespec64 *tsh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hjɰhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjưubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj˰modnameN classnameNjcjf)}ji]jl)}j_jvsbc.put_timespec64asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htsh]hts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h$struct __kernel_timespec __user *utsh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj=modnameN classnameNjcjf)}ji]jc.put_timespec64asbuh1hhjubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hutsh]huts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhjahM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjahM{ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjahM{hjHhhubj )}(hhh]j9)}(hUconvert timespec64 value to __kernel_timespec format and copy the latter to userspaceh]hUconvert timespec64 value to __kernel_timespec format and copy the latter to userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{hjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahM{ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jȱj4jȱj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` ``struct __kernel_timespec __user *uts`` user's :c:type:`struct __kernel_timespec <__kernel_timespec>` **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hjұh]h Parameters}(hjԱhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjбubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj̱ubj)}(hhh](j)}(hO``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` h](j)}(h``const struct timespec64 *ts``h]j?)}(hjh]hconst struct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM}hjubj)}(hhh]j9)}(h.input :c:type:`struct timespec64 `h](hinput }(hj hhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhjhM}hj ubeh}(h]h ]h"]h$]h&]uh1j8hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(hg``struct __kernel_timespec __user *uts`` user's :c:type:`struct __kernel_timespec <__kernel_timespec>` h](j)}(h(``struct __kernel_timespec __user *uts``h]j?)}(hjIh]h$struct __kernel_timespec __user *uts}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM~hjCubj)}(hhh]j9)}(h=user's :c:type:`struct __kernel_timespec <__kernel_timespec>`h](h user’s }(hjbhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]j?)}(hjlh]hstruct __kernel_timespec}(hjnhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj__kernel_timespecuh1hhj^hM~hjbubeh}(h]h ]h"]h$]h&]uh1j8hj^hM~hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM~hjubeh}(h]h ]h"]h$]h&]uh1jhj̱ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj̱ubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj̱ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_old_timespec32 (C function)c.get_old_timespec32hNtauh1hhjehhhNhNubh)}(hhh](h)}(hFint get_old_timespec32 (struct timespec64 *ts, const void __user *uts)h]h)}(hEint get_old_timespec32(struct timespec64 *ts, const void __user *uts)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hget_old_timespec32h]h)}(hget_old_timespec32h]hget_old_timespec32}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h/(struct timespec64 *ts, const void __user *uts)h](j&)}(hstruct timespec64 *tsh](j+)}(hj.h]hstruct}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubh)}(hhh]h)}(h timespec64h]h timespec64}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jl)}j_j sbc.get_old_timespec32asbuh1hhj!ubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(htsh]hts}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst void __user *utsh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjҳhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hutsh]huts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j۲ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjݲhhubj )}(hhh]j9)}(h2get user's old-format time value into kernel spaceh]h4get user’s old-format time value into kernel space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjݲhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhjehNhNubjp)}(hXC**Parameters** ``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` ``const void __user *uts`` user's old-format time value (:c:type:`struct old_timespec32 `) **Description** Handles X86_X32_ABI compatibility conversion. **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]j?)}(hjXh]hstruct timespec64 *ts}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjRubj)}(hhh]j9)}(h4destination :c:type:`struct timespec64 `h](h destination }(hjqhhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hj{h]hstruct timespec64}(hj}hhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhjmhMhjqubeh}(h]h ]h"]h$]h&]uh1j8hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(hk``const void __user *uts`` user's old-format time value (:c:type:`struct old_timespec32 `) h](j)}(h``const void __user *uts``h]j?)}(hjh]hconst void __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hOuser's old-format time value (:c:type:`struct old_timespec32 `)h](h user’s old-format time value (}(hjɴhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j?)}(hjӴh]hstruct old_timespec32}(hjմhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjѴubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjold_timespec32uh1hhjŴhMhjɴubh)}(hjɴhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjŴhMhjƴubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŴhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubj9)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubj9)}(h **Return**h]jz)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_old_timespec32 (C function)c.put_old_timespec32hNtauh1hhjehhhNhNubh)}(hhh](h)}(hFint put_old_timespec32 (const struct timespec64 *ts, void __user *uts)h]h)}(hEint put_old_timespec32(const struct timespec64 *ts, void __user *uts)h](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvhhhjhMubh)}(hput_old_timespec32h]h)}(hput_old_timespec32h]hput_old_timespec32}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjhMubj )}(h/(const struct timespec64 *ts, void __user *uts)h](j&)}(hconst struct timespec64 *tsh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjĵhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjҵhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjߵhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.put_old_timespec32asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htsh]hts}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid __user *utsh](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh__user}(hj@hhhNhNubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hutsh]huts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjohhubj )}(hhh]j9)}(hmconvert timespec64 value to :c:type:`struct old_timespec32 ` and copy the latter to userspaceh](hconvert timespec64 value to }(hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j?)}(hjh]hstruct old_timespec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]j c.put_old_timespec32asbjold_timespec32uh1hhj<hMrhjubh! and copy the latter to userspace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX%**Parameters** ``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` ``void __user *uts`` user's :c:type:`struct old_timespec32 ` **Description** Handles X86_X32_ABI compatibility conversion. **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hO``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` h](j)}(h``const struct timespec64 *ts``h]j?)}(hjh]hconst struct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj ubj)}(hhh]j9)}(h.input :c:type:`struct timespec64 `h](hinput }(hj+hhhNhNubh)}(h(:c:type:`struct timespec64 `h]j?)}(hj5h]hstruct timespec64}(hj7hhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj timespec64uh1hhj'hMhj+ubeh}(h]h ]h"]h$]h&]uh1j8hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubj)}(hM``void __user *uts`` user's :c:type:`struct old_timespec32 ` h](j)}(h``void __user *uts``h]j?)}(hjjh]hvoid __user *uts}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjdubj)}(hhh]j9)}(h7user's :c:type:`struct old_timespec32 `h](h user’s }(hjhhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]j?)}(hjh]hstruct old_timespec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjold_timespec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjķh]h Description}(hjƷhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj·ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hjڷhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌget_itimerspec64 (C function)c.get_itimerspec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(h\int get_itimerspec64 (struct itimerspec64 *it, const struct __kernel_itimerspec __user *uit)h]h)}(h[int get_itimerspec64(struct itimerspec64 *it, const struct __kernel_itimerspec __user *uit)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj>hMubh)}(hget_itimerspec64h]h)}(hget_itimerspec64h]hget_itimerspec64}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hMubj )}(hG(struct itimerspec64 *it, const struct __kernel_itimerspec __user *uit)h](j&)}(hstruct itimerspec64 *ith](j+)}(hj.h]hstruct}(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.get_itimerspec64asbuh1hhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hith]hit}(hjƸhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(h,const struct __kernel_itimerspec __user *uith](j+)}(hj<*h]hconst}(hj߸hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj۸ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj۸ubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj۸ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj۸ubh)}(hhh]h)}(h__kernel_itimerspech]h__kernel_itimerspec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.get_itimerspec64asbuh1hhj۸ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj۸ubh__user}(hj۸hhhNhNubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj۸ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۸ubh)}(huith]huit}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj۸ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj%hhubj )}(hhh]j9)}(hWget user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` into kernel space<h](h get user’s }(hjhhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j?)}(hjh]hstruct __kernel_itimerspec}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]jc.get_itimerspec64asbj__kernel_itimerspecuh1hhj<hMrhjubh into kernel space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j͹j4j͹j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct itimerspec64 *it`` destination :c:type:`struct itimerspec64 ` ``const struct __kernel_itimerspec __user *uit`` user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hj׹h]h Parameters}(hjٹhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjչubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjѹubj)}(hhh](j)}(hU``struct itimerspec64 *it`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *it``h]j?)}(hjh]hstruct itimerspec64 *it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj itimerspec64uh1hhj hMhjubeh}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hs``const struct __kernel_itimerspec __user *uit`` user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` h](j)}(h0``const struct __kernel_itimerspec __user *uit``h]j?)}(hjNh]h,const struct __kernel_itimerspec __user *uit}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjHubj)}(hhh]j9)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(hjghhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j?)}(hjqh]hstruct __kernel_itimerspec}(hjshhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj__kernel_itimerspecuh1hhjchMhjgubeh}(h]h ]h"]h$]h&]uh1j8hjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjubeh}(h]h ]h"]h$]h&]uh1jhjѹubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjѹubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjѹubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌput_itimerspec64 (C function)c.put_itimerspec64hNtauh1hhjehhhNhNubh)}(hhh](h)}(h\int put_itimerspec64 (const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h]h)}(h[int put_itimerspec64(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hput_itimerspec64h]h)}(hput_itimerspec64h]hput_itimerspec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hG(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j&)}(hconst struct itimerspec64 *ith](j+)}(hj<*h]hconst}(hj*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj+)}(hj.h]hstruct}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jsbc.put_itimerspec64asbuh1hhj&ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hith]hit}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubj&)}(h&struct __kernel_itimerspec __user *uith](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjĻhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h__kernel_itimerspech]h__kernel_itimerspec}(hjջhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjһubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj׻modnameN classnameNjcjf)}ji]jc.put_itimerspec64asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(huith]huit}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hsconvert :c:type:`struct itimerspec64 ` to __kernel_itimerspec format and copy the latter to userspaceh](hconvert }(hjJhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjTh]hstruct itimerspec64}(hjVhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]jc.put_itimerspec64asbj itimerspec64uh1hhj<hMrhjJubh? to __kernel_itimerspec format and copy the latter to userspace}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX **Parameters** ``const struct itimerspec64 *it`` input :c:type:`struct itimerspec64 ` ``struct __kernel_itimerspec __user *uit`` user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh](j)}(hU``const struct itimerspec64 *it`` input :c:type:`struct itimerspec64 ` h](j)}(h!``const struct itimerspec64 *it``h]j?)}(hjh]hconst struct itimerspec64 *it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hj̼hhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjּh]hstruct itimerspec64}(hjؼhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjԼubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj itimerspec64uh1hhjȼhMhj̼ubeh}(h]h ]h"]h$]h&]uh1j8hjȼhMhjɼubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȼhMhjubj)}(hm``struct __kernel_itimerspec __user *uit`` user's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>` h](j)}(h*``struct __kernel_itimerspec __user *uit``h]j?)}(hj h]h&struct __kernel_itimerspec __user *uit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(hAuser's :c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h](h user’s }(hj$hhhNhNubh)}(h::c:type:`struct __kernel_itimerspec <__kernel_itimerspec>`h]j?)}(hj.h]hstruct __kernel_itimerspec}(hj0hhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj__kernel_itimerspecuh1hhj hMhj$ubeh}(h]h ]h"]h$]h&]uh1j8hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!get_old_itimerspec32 (C function)c.get_old_itimerspec32hNtauh1hhjehhhNhNubh)}(hhh](h)}(h_int get_old_itimerspec32 (struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h]h)}(h^int get_old_itimerspec32(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hget_old_itimerspec32h]h)}(hget_old_itimerspec32h]hget_old_itimerspec32}(hj˽hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǽubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hF(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j&)}(hstruct itimerspec64 *itsh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jͽsbc.get_old_itimerspec32asbuh1hhjubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hitsh]hits}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj߽ubj&)}(h*const struct old_itimerspec32 __user *uitsh](j+)}(hj<*h]hconst}(hjYhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj+)}(hj.h]hstruct}(hjthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hhh]h)}(hold_itimerspec32h]hold_itimerspec32}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j!c.get_old_itimerspec32asbuh1hhjUubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh__user}(hjUhhhNhNubj=)}(h h]h }(hj¾hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjоhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(huitsh]huits}(hjݾhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj߽ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hQget user's :c:type:`struct old_itimerspec32 ` into kernel spaceh](h get user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j?)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]j!c.get_old_itimerspec32asbjold_itimerspec32uh1hhj<hMrhjubh into kernel space}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jGj4jGj5j6j7uh1hhhhjehNhNubjp)}(hX **Parameters** ``struct itimerspec64 *its`` destination :c:type:`struct itimerspec64 ` ``const struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjKubj)}(hhh](j)}(hV``struct itimerspec64 *its`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *its``h]j?)}(hjph]hstruct itimerspec64 *its}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjjubj)}(hhh]j9)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(hk``const struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h.``const struct old_itimerspec32 __user *uits``h]j?)}(hjȿh]h*const struct old_itimerspec32 __user *uits}(hjʿhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjƿubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj¿ubj)}(hhh]j9)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j?)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjold_itimerspec32uh1hhjݿhMhjubeh}(h]h ]h"]h$]h&]uh1j8hjݿhMhj޿ubah}(h]h ]h"]h$]h&]uh1jhj¿ubeh}(h]h ]h"]h$]h&]uh1jhjݿhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h **Return**h]jz)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjKubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!put_old_itimerspec32 (C function)c.put_old_itimerspec32hNtauh1hhjehhhNhNubh)}(hhh](h)}(h_int put_old_itimerspec32 (const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h]h)}(h^int put_old_itimerspec32(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjchhhjuhM ubh)}(hput_old_itimerspec32h]h)}(hput_old_itimerspec32h]hput_old_itimerspec32}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjuhM ubj )}(hF(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j&)}(hconst struct itimerspec64 *itsh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.put_old_itimerspec32asbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hitsh]hits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h$struct old_itimerspec32 __user *uitsh](j+)}(hj.h]hstruct}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hhh]h)}(hold_itimerspec32h]hold_itimerspec32}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jc.put_old_itimerspec32asbuh1hhj-ubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh__user}(hj-hhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(huitsh]huits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjchhhjuhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhjuhM ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1hhjuhM hj\hhubj )}(hhh]j9)}(hconvert :c:type:`struct itimerspec64 ` to :c:type:`struct old_itimerspec32 ` and copy the latter to userspaceh](hconvert }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjf)}ji]jc.put_old_itimerspec32asbj itimerspec64uh1hhj<hMrhjubh to }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j?)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjold_itimerspec32uh1hhj<hMrhjubh! and copy the latter to userspace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'j4j'j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``const struct itimerspec64 *its`` input :c:type:`struct itimerspec64 ` ``struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` **Return** 0 on success or negative errno on errorh](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj+ubj)}(hhh](j)}(hV``const struct itimerspec64 *its`` input :c:type:`struct itimerspec64 ` h](j)}(h"``const struct itimerspec64 *its``h]j?)}(hjPh]hconst struct itimerspec64 *its}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjJubj)}(hhh]j9)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hjihhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]j?)}(hjsh]hstruct itimerspec64}(hjuhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj itimerspec64uh1hhjehMhjiubeh}(h]h ]h"]h$]h&]uh1j8hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(he``struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h(``struct old_itimerspec32 __user *uits``h]j?)}(hjh]h$struct old_itimerspec32 __user *uits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]j9)}(h;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]j?)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjold_itimerspec32uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj+ubj9)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%__round_jiffies_relative (C function)c.__round_jiffies_relativehNtauh1hhjehhhNhNubh)}(hhh](h)}(hAunsigned long __round_jiffies_relative (unsigned long j, int cpu)h]h)}(h@unsigned long __round_jiffies_relative(unsigned long j, int cpu)h](j)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjUhMubj)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjUhMubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjUhMubh)}(h__round_jiffies_relativeh]h)}(h__round_jiffies_relativeh]h__round_jiffies_relative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjUhMubj )}(h(unsigned long j, int cpu)h](j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcpuh]hcpu}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhjUhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhjUhMubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhjUhMhj<hhubj )}(hhh]j9)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhjehNhNubjp)}(hXh**Parameters** ``unsigned long j`` the time in (relative) jiffies that should be rounded ``int cpu`` the processor number on which the timeout will happen **Description** __round_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds. By rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power. The exact rounding is skewed for each processor to avoid all processors firing at the exact same time, which could lead to lock contention or spurious cache line bouncing. The return value is the rounded version of the **j** parameter.h](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubj)}(hhh](j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hjwh]hunsigned long j}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjqubj)}(hhh]j9)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]j?)}(hjh]hint cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubj9)}(hX__round_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.h]hX__round_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubj9)}(hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.h]hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubj9)}(hThe exact rounding is skewed for each processor to avoid all processors firing at the exact same time, which could lead to lock contention or spurious cache line bouncing.h]hThe exact rounding is skewed for each processor to avoid all processors firing at the exact same time, which could lead to lock contention or spurious cache line bouncing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubj9)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hj.hhhNhNubjz)}(h**j**h]hj}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh parameter.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌround_jiffies (C function)c.round_jiffieshNtauh1hhjehhhNhNubh)}(hhh](h)}(h-unsigned long round_jiffies (unsigned long j)h]h)}(h,unsigned long round_jiffies(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkhhhj}hMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkhhhj}hMubh)}(h round_jiffiesh]h)}(h round_jiffiesh]h round_jiffies}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hMubj )}(h(unsigned long j)h]j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjkhhhj}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhj}hMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhj}hMhjdhhubj )}(hhh]j9)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhjehNhNubjp)}(hXn**Parameters** ``unsigned long j`` the time in (absolute) jiffies that should be rounded **Description** round_jiffies() rounds an absolute time in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds. By rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power. The return value is the rounded version of the **j** parameter.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjEubj)}(hhh]j)}(hJ``unsigned long j`` the time in (absolute) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hjjh]hunsigned long j}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjdubj)}(hhh]j9)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjEubj9)}(hround_jiffies() rounds an absolute time in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.h]hround_jiffies() rounds an absolute time in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjEubj9)}(hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.h]hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjEubj9)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hjhhhNhNubjz)}(h**j**h]hj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#round_jiffies_relative (C function)c.round_jiffies_relativehNtauh1hhjehhhNhNubh)}(hhh](h)}(h6unsigned long round_jiffies_relative (unsigned long j)h]h)}(h5unsigned long round_jiffies_relative(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj(hMubj)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj(hMubh)}(hround_jiffies_relativeh]h)}(hround_jiffies_relativeh]hround_jiffies_relative}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hMubj )}(h(unsigned long j)h]j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj(hMhjhhubj )}(hhh]j9)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hXt**Parameters** ``unsigned long j`` the time in (relative) jiffies that should be rounded **Description** round_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds. By rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power. The return value is the rounded version of the **j** parameter.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hround_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.h]hround_jiffies_relative() rounds a time delta in the future (in jiffies) up or down to (approximately) full seconds. This is useful for timers for which the exact time they fire does not matter too much, as long as they fire approximately every X seconds.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.h]hBy rounding these timers to whole seconds, all such timers will fire at the same time, rather than at various times spread out. The goal of this is to have the CPU wake up less, which saves power.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h?The return value is the rounded version of the **j** parameter.h](h/The return value is the rounded version of the }(hjhhhNhNubjz)}(h**j**h]hj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(__round_jiffies_up_relative (C function)c.__round_jiffies_up_relativehNtauh1hhjehhhNhNubh)}(hhh](h)}(hDunsigned long __round_jiffies_up_relative (unsigned long j, int cpu)h]h)}(hCunsigned long __round_jiffies_up_relative(unsigned long j, int cpu)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h__round_jiffies_up_relativeh]h)}(h__round_jiffies_up_relativeh]h__round_jiffies_up_relative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(unsigned long j, int cpu)h](j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint cpuh](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``unsigned long j`` the time in (relative) jiffies that should be rounded ``int cpu`` the processor number on which the timeout will happen **Description** This is the same as __round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh](j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]j?)}(hj.h]hint cpu}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj(ubj)}(hhh]j9)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis is the same as __round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h]hThis is the same as __round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don’t fire too early.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌround_jiffies_up (C function)c.round_jiffies_uphNtauh1hhjehhhNhNubh)}(hhh](h)}(h0unsigned long round_jiffies_up (unsigned long j)h]h)}(h/unsigned long round_jiffies_up(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hround_jiffies_uph]h)}(hround_jiffies_uph]hround_jiffies_up}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(unsigned long j)h]j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjYh]hj}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX7**Parameters** ``unsigned long j`` the time in (absolute) jiffies that should be rounded **Description** This is the same as round_jiffies() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(hJ``unsigned long j`` the time in (absolute) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hjh]hunsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(h5the time in (absolute) jiffies that should be roundedh]h5the time in (absolute) jiffies that should be rounded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis is the same as round_jiffies() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h]hThis is the same as round_jiffies() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don’t fire too early.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&round_jiffies_up_relative (C function)c.round_jiffies_up_relativehNtauh1hhjehhhNhNubh)}(hhh](h)}(h9unsigned long round_jiffies_up_relative (unsigned long j)h]h)}(h8unsigned long round_jiffies_up_relative(unsigned long j)h](j)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hMubj)}(hlongh]hlong}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj7hMubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hMubh)}(hround_jiffies_up_relativeh]h)}(hround_jiffies_up_relativeh]hround_jiffies_up_relative}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(h(unsigned long j)h]j&)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubh)}(hjYh]hj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubah}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX@**Parameters** ``unsigned long j`` the time in (relative) jiffies that should be rounded **Description** This is the same as round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(hJ``unsigned long j`` the time in (relative) jiffies that should be rounded h](j)}(h``unsigned long j``h]j?)}(hj$h]hunsigned long j}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(h5the time in (relative) jiffies that should be roundedh]h5the time in (relative) jiffies that should be rounded}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis is the same as round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don't fire too early.h]hThis is the same as round_jiffies_relative() except that it will never round down. This is useful for timeouts for which the exact time of firing does not matter too much, as long as they don’t fire too early.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_init_key (C function)c.timer_init_keyhNtauh1hhjehhhNhNubh)}(hhh](h)}(hvoid timer_init_key (struct timer_list *timer, void (*func)(struct timer_list *), unsigned int flags, const char *name, struct lock_class_key *key)h]h)}(hvoid timer_init_key(struct timer_list *timer, void (*func)(struct timer_list*), unsigned int flags, const char *name, struct lock_class_key *key)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMaubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMaubh)}(htimer_init_keyh]h)}(htimer_init_keyh]htimer_init_key}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMaubj )}(h~(struct timer_list *timer, void (*func)(struct timer_list*), unsigned int flags, const char *name, struct lock_class_key *key)h](j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.timer_init_keyasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h void (*func)(struct timer_list*)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOubj)}(hj6h]h(}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hfunch]hfunc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjOubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.timer_init_keyasbuh1hhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hflagsh]hflags}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubj)}(hcharh]hchar}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct lock_class_key *keyh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hlock_class_keyh]hlock_class_key}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.timer_init_keyasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMahjhhubj )}(hhh]j9)}(hinitialize a timerh]hinitialize a timer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMahj>hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMaubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jYj4jYj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` the timer to be initialized ``void (*func)(struct timer_list *)`` timer callback function ``unsigned int flags`` timer flags ``const char *name`` name of the timer ``struct lock_class_key *key`` lockdep class key of the fake lock used for tracking timer sync lock dependencies **Description** timer_init_key() must be done to a timer prior to calling *any* of the other timer functions.h](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehj]ubj)}(hhh](j)}(h9``struct timer_list *timer`` the timer to be initialized h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMbhj|ubj)}(hhh]j9)}(hthe timer to be initializedh]hthe timer to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMbhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjyubj)}(h>``void (*func)(struct timer_list *)`` timer callback function h](j)}(h%``void (*func)(struct timer_list *)``h]j?)}(hjh]h!void (*func)(struct timer_list *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjubj)}(hhh]j9)}(htimer callback functionh]htimer callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjyubj)}(h#``unsigned int flags`` timer flags h](j)}(h``unsigned int flags``h]j?)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhjubj)}(hhh]j9)}(h timer flagsh]h timer flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMdhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMdhjyubj)}(h'``const char *name`` name of the timer h](j)}(h``const char *name``h]j?)}(hj-h]hconst char *name}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehj'ubj)}(hhh]j9)}(hname of the timerh]hname of the timer}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMehjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMehjyubj)}(hq``struct lock_class_key *key`` lockdep class key of the fake lock used for tracking timer sync lock dependencies h](j)}(h``struct lock_class_key *key``h]j?)}(hjfh]hstruct lock_class_key *key}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMghj`ubj)}(hhh]j9)}(hQlockdep class key of the fake lock used for tracking timer sync lock dependenciesh]hQlockdep class key of the fake lock used for tracking timer sync lock dependencies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMfhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMghjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMihj]ubj9)}(h]timer_init_key() must be done to a timer prior to calling *any* of the other timer functions.h](h:timer_init_key() must be done to a timer prior to calling }(hjhhhNhNubj3)}(h*any*h]hany}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh of the other timer functions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmod_timer_pending (C function)c.mod_timer_pendinghNtauh1hhjehhhNhNubh)}(hhh](h)}(hGint mod_timer_pending (struct timer_list *timer, unsigned long expires)h]h)}(hFint mod_timer_pending(struct timer_list *timer, unsigned long expires)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMyubh)}(hmod_timer_pendingh]h)}(hmod_timer_pendingh]hmod_timer_pending}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMyubj )}(h1(struct timer_list *timer, unsigned long expires)h](j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hj6hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2ubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubh)}(hhh]h)}(h timer_listh]h timer_list}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]jl)}j_jsbc.mod_timer_pendingasbuh1hhj2ubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubj&)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMyhjhhubj )}(hhh]j9)}(h Modify a pending timer's timeouth]h"Modify a pending timer’s timeout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMyubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j"j4j"j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The pending timer to be modified ``unsigned long expires`` New absolute timeout in jiffies **Description** mod_timer_pending() is the same for pending timers as mod_timer(), but will not activate inactive timers. If **timer->function** == NULL then the start operation is silently discarded. **Return** * ``0`` - The timer was inactive and not modified or was in shutdown state and the operation was discarded * ``1`` - The timer was active and requeued to expire at **expires**h](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hj&ubj)}(hhh](j)}(h>``struct timer_list *timer`` The pending timer to be modified h](j)}(h``struct timer_list *timer``h]j?)}(hjKh]hstruct timer_list *timer}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMzhjEubj)}(hhh]j9)}(h The pending timer to be modifiedh]h The pending timer to be modified}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMzhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMzhjBubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j?)}(hjh]hunsigned long expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM{hj~ubj)}(hhh]j9)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM{hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hj&ubj9)}(himod_timer_pending() is the same for pending timers as mod_timer(), but will not activate inactive timers.h]himod_timer_pending() is the same for pending timers as mod_timer(), but will not activate inactive timers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM|hj&ubj9)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hjhhhNhNubjz)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh8 == NULL then the start operation is silently discarded.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj&ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj&ubj_)}(hhh](jp)}(hm``0`` - The timer was inactive and not modified or was in shutdown state and the operation was discardedh]j)}(hhh]j)}(hh``0`` - The timer was inactive and not modified or was in shutdown state and the operation was discardedh](j)}(h9``0`` - The timer was inactive and not modified or was inh](j?)}(h``0``h]h0}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubh4 - The timer was inactive and not modified or was in}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj'ubj)}(hhh]j9)}(h.shutdown state and the operation was discardedh]h.shutdown state and the operation was discarded}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjHubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hB``1`` - The timer was active and requeued to expire at **expires**h]j9)}(hjth](j?)}(h``1``h]h1}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubh2 - The timer was active and requeued to expire at }(hjvhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjrubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_juh1j_hjGhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌmod_timer (C function) c.mod_timerhNtauh1hhjehhhNhNubh)}(hhh](h)}(h?int mod_timer (struct timer_list *timer, unsigned long expires)h]h)}(h>int mod_timer(struct timer_list *timer, unsigned long expires)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h mod_timerh]h)}(h mod_timerh]h mod_timer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h1(struct timer_list *timer, unsigned long expires)h](j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_jsb c.mod_timerasbuh1hhjubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwubh)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hModify a timer's timeouth]hModify a timer’s timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hXZ**Parameters** ``struct timer_list *timer`` The timer to be modified ``unsigned long expires`` New absolute timeout in jiffies **Description** mod_timer(timer, expires) is equivalent to: timer_delete(timer); timer->expires = expires; add_timer(timer); mod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time **expires**. Note that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer. If **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless. **Return** * ``0`` - The timer was inactive and started or was in shutdown state and the operation was discarded * ``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry timeh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh](j)}(h6``struct timer_list *timer`` The timer to be modified h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hThe timer to be modifiedh]hThe timer to be modified}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j?)}(hjWh]hunsigned long expires}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjQubj)}(hhh]j9)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h+mod_timer(timer, expires) is equivalent to:h]h+mod_timer(timer, expires) is equivalent to:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjU)}(hAtimer_delete(timer); timer->expires = expires; add_timer(timer); h]j9)}(h@timer_delete(timer); timer->expires = expires; add_timer(timer);h]h@timer_delete(timer); timer->expires = expires; add_timer(timer);}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jThjhMhjubj9)}(hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time **expires**.h](hmod_timer() is more efficient than the above open coded sequence. In case that the timer is inactive, the timer_delete() part is a NOP. The timer is in any case activated with the new expiry time }(hjhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hNote that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer.h]hNote that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hIf **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.h](hIf }(hjhhhNhNubjz)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhl == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h **Return**h]jz)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj_)}(hhh](jp)}(hh``0`` - The timer was inactive and started or was in shutdown state and the operation was discardedh]j)}(hhh]j)}(hc``0`` - The timer was inactive and started or was in shutdown state and the operation was discardedh](j)}(h=``0`` - The timer was inactive and started or was in shutdownh](j?)}(h``0``h]h0}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubh8 - The timer was inactive and started or was in shutdown}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjCubj)}(hhh]j9)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjdubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjchMhj@ubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1johj9ubjp)}(h``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry timeh]j)}(hhh]j)}(h``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry timeh](j)}(hE``1`` - The timer was active and requeued to expire at **expires** orh](j?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh2 - The timer was active and requeued to expire at }(hjhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh or}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hbthe timer was active and not modified because **expires** did not change the effective expiry timeh](h.the timer was active and not modified because }(hjhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) did not change the effective expiry time}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1johj9ubeh}(h]h ]h"]h$]h&]j_juh1j_hjchMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_reduce (C function)c.timer_reducehNtauh1hhjehhhNhNubh)}(hhh](h)}(hBint timer_reduce (struct timer_list *timer, unsigned long expires)h]h)}(hAint timer_reduce(struct timer_list *timer, unsigned long expires)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hMubh)}(h timer_reduceh]h)}(h timer_reduceh]h timer_reduce}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(h1(struct timer_list *timer, unsigned long expires)h](j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.timer_reduceasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(h7Modify a timer's timeout if it would reduce the timeouth]h9Modify a timer’s timeout if it would reduce the timeout}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be modified ``unsigned long expires`` New absolute timeout in jiffies **Description** timer_reduce() is very similar to mod_timer(), except that it will only modify an enqueued timer if that would reduce the expiration time. If **timer** is not enqueued it starts the timer. If **timer->function** == NULL then the start operation is silently discarded. **Return** * ``0`` - The timer was inactive and started or was in shutdown state and the operation was discarded * ``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry time such that the timer would expire earlier than already scheduledh](j9)}(h**Parameters**h]jz)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjVubj)}(hhh](j)}(h6``struct timer_list *timer`` The timer to be modified h](j)}(h``struct timer_list *timer``h]j?)}(hj{h]hstruct timer_list *timer}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjuubj)}(hhh]j9)}(hThe timer to be modifiedh]hThe timer to be modified}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]j?)}(hjh]hunsigned long expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hNew absolute timeout in jiffiesh]hNew absolute timeout in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjVubj9)}(htimer_reduce() is very similar to mod_timer(), except that it will only modify an enqueued timer if that would reduce the expiration time. If **timer** is not enqueued it starts the timer.h](htimer_reduce() is very similar to mod_timer(), except that it will only modify an enqueued timer if that would reduce the expiration time. If }(hjhhhNhNubjz)}(h **timer**h]htimer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% is not enqueued it starts the timer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjVubj9)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hj&hhhNhNubjz)}(h**timer->function**h]htimer->function}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh8 == NULL then the start operation is silently discarded.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjVubj9)}(h **Return**h]jz)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjVubj_)}(hhh](jp)}(hh``0`` - The timer was inactive and started or was in shutdown state and the operation was discardedh]j)}(hhh]j)}(hc``0`` - The timer was inactive and started or was in shutdown state and the operation was discardedh](j)}(h=``0`` - The timer was inactive and started or was in shutdownh](j?)}(h``0``h]h0}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubh8 - The timer was inactive and started or was in shutdown}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjiubj)}(hhh]j9)}(h%state and the operation was discardedh]h%state and the operation was discarded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1johj_ubjp)}(h``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry time such that the timer would expire earlier than already scheduledh]j)}(hhh]j)}(h``1`` - The timer was active and requeued to expire at **expires** or the timer was active and not modified because **expires** did not change the effective expiry time such that the timer would expire earlier than already scheduledh](j)}(hE``1`` - The timer was active and requeued to expire at **expires** orh](j?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh2 - The timer was active and requeued to expire at }(hjhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh or}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hthe timer was active and not modified because **expires** did not change the effective expiry time such that the timer would expire earlier than already scheduledh](h.the timer was active and not modified because }(hjhhhNhNubjz)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhi did not change the effective expiry time such that the timer would expire earlier than already scheduled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1johj_ubeh}(h]h ]h"]h$]h&]j_juh1j_hjhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer (C function) c.add_timerhNtauh1hhjehhhNhNubh)}(hhh](h)}(h)void add_timer (struct timer_list *timer)h]h)}(h(void add_timer(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLhhhj^hMubh)}(h add_timerh]h)}(h add_timerh]h add_timer}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhj^hMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jssb c.add_timerasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjLhhhj^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhj^hMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhj^hMhjEhhubj )}(hhh]j9)}(h Start a timerh]h Start a timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be started **Description** Start **timer** to expire at **timer->expires** in the future. **timer->expires** is the absolute expiry time measured in 'jiffies'. When the timer expires timer->function(timer) will be invoked from soft interrupt context. The **timer->expires** and **timer->function** fields must be set prior to calling this function. If **timer->function** == NULL then the start operation is silently discarded. If **timer->expires** is already in the past **timer** will be queued to expire at the next timer tick. This can only operate on an inactive timer. Attempts to invoke this on an active timer are rejected with a warning.h](j9)}(h**Parameters**h]jz)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj)}(hhh]j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]j?)}(hjQh]hstruct timer_list *timer}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjKubj)}(hhh]j9)}(hThe timer to be startedh]hThe timer to be started}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj9)}(hStart **timer** to expire at **timer->expires** in the future. **timer->expires** is the absolute expiry time measured in 'jiffies'. When the timer expires timer->function(timer) will be invoked from soft interrupt context.h](hStart }(hjhhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to expire at }(hjhhhNhNubjz)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh in the future. }(hjhhhNhNubjz)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is the absolute expiry time measured in ‘jiffies’. When the timer expires timer->function(timer) will be invoked from soft interrupt context.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj9)}(haThe **timer->expires** and **timer->function** fields must be set prior to calling this function.h](hThe }(hjhhhNhNubjz)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and }(hjhhhNhNubjz)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh3 fields must be set prior to calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj9)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hjhhhNhNubjz)}(h**timer->function**h]htimer->function}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh8 == NULL then the start operation is silently discarded.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj9)}(hgIf **timer->expires** is already in the past **timer** will be queued to expire at the next timer tick.h](hIf }(hj;hhhNhNubjz)}(h**timer->expires**h]htimer->expires}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh is already in the past }(hj;hhhNhNubjz)}(h **timer**h]htimer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh1 will be queued to expire at the next timer tick.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubj9)}(hsThis can only operate on an inactive timer. Attempts to invoke this on an active timer are rejected with a warning.h]hsThis can only operate on an inactive timer. Attempts to invoke this on an active timer are rejected with a warning.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_local (C function)c.add_timer_localhNtauh1hhjehhhNhNubh)}(hhh](h)}(h/void add_timer_local (struct timer_list *timer)h]h)}(h.void add_timer_local(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hadd_timer_localh]h)}(hadd_timer_localh]hadd_timer_local}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.add_timer_localasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hStart a timer on the local CPUh]hStart a timer on the local CPU}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``struct timer_list *timer`` The timer to be started **Description** Same as add_timer() except that the timer flag TIMER_PINNED is set. See add_timer() for further details.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj)}(hhh]j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hThe timer to be startedh]hThe timer to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj9)}(hCSame as add_timer() except that the timer flag TIMER_PINNED is set.h]hCSame as add_timer() except that the timer flag TIMER_PINNED is set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubj9)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_global (C function)c.add_timer_globalhNtauh1hhjehhhNhNubh)}(hhh](h)}(h0void add_timer_global (struct timer_list *timer)h]h)}(h/void add_timer_global(struct timer_list *timer)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj;hMubh)}(hadd_timer_globalh]h)}(hadd_timer_globalh]hadd_timer_global}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjfubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jPsbc.add_timer_globalasbuh1hhjfubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubah}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj"hhubj )}(hhh]j9)}(h+Start a timer without TIMER_PINNED flag seth]h+Start a timer without TIMER_PINNED flag set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(h**Parameters** ``struct timer_list *timer`` The timer to be started **Description** Same as add_timer() except that the timer flag TIMER_PINNED is unset. See add_timer() for further details.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj)}(hhh]j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]j?)}(hj.h]hstruct timer_list *timer}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj(ubj)}(hhh]j9)}(hThe timer to be startedh]hThe timer to be started}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj9)}(hESame as add_timer() except that the timer flag TIMER_PINNED is unset.h]hESame as add_timer() except that the timer flag TIMER_PINNED is unset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubj9)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_timer_on (C function)c.add_timer_onhNtauh1hhjehhhNhNubh)}(hhh](h)}(h5void add_timer_on (struct timer_list *timer, int cpu)h]h)}(h4void add_timer_on(struct timer_list *timer, int cpu)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h add_timer_onh]h)}(h add_timer_onh]h add_timer_on}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h#(struct timer_list *timer, int cpu)h](j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.add_timer_onasbuh1hhjubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint cpuh](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h!Start a timer on a particular CPUh]h!Start a timer on a particular CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be started ``int cpu`` The CPU to start it on **Description** Same as add_timer() except that it starts the timer on the given CPU and the TIMER_PINNED flag is set. When timer shouldn't be a pinned timer in the next round, add_timer_global() should be used instead as it unsets the TIMER_PINNED flag. See add_timer() for further details.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj)}(hhh](j)}(h5``struct timer_list *timer`` The timer to be started h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj)}(hhh]j9)}(hThe timer to be startedh]hThe timer to be started}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h#``int cpu`` The CPU to start it on h](j)}(h ``int cpu``h]j?)}(hj,h]hint cpu}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hj&ubj)}(hhh]j9)}(hThe CPU to start it onh]hThe CPU to start it on}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhM hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj9)}(hSame as add_timer() except that it starts the timer on the given CPU and the TIMER_PINNED flag is set. When timer shouldn't be a pinned timer in the next round, add_timer_global() should be used instead as it unsets the TIMER_PINNED flag.h]hSame as add_timer() except that it starts the timer on the given CPU and the TIMER_PINNED flag is set. When timer shouldn’t be a pinned timer in the next round, add_timer_global() should be used instead as it unsets the TIMER_PINNED flag.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjubj9)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_delete (C function)c.timer_deletehNtauh1hhjehhhNhNubh)}(hhh](h)}(h+int timer_delete (struct timer_list *timer)h]h)}(h*int timer_delete(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMoubh)}(h timer_deleteh]h)}(h timer_deleteh]h timer_delete}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMoubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.timer_deleteasbuh1hhjubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMoubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMohjhhubj )}(hhh]j9)}(hDeactivate a timerh]hDeactivate a timer}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMohjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMoubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be deactivated **Description** The function only deactivates a pending timer, but contrary to timer_delete_sync() it does not take into account whether the timer's callback function is concurrently executed on a different CPU or not. It neither prevents rearming of the timer. If **timer** can be rearmed concurrently then the return value of this function is meaningless. **Return** * ``0`` - The timer was not pending * ``1`` - The timer was pending and deactivatedh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMshjubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMphjubj)}(hhh]j9)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMrhjubj9)}(hXVThe function only deactivates a pending timer, but contrary to timer_delete_sync() it does not take into account whether the timer's callback function is concurrently executed on a different CPU or not. It neither prevents rearming of the timer. If **timer** can be rearmed concurrently then the return value of this function is meaningless.h](hThe function only deactivates a pending timer, but contrary to timer_delete_sync() it does not take into account whether the timer’s callback function is concurrently executed on a different CPU or not. It neither prevents rearming of the timer. If }(hj hhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubhS can be rearmed concurrently then the return value of this function is meaningless.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMqhjubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMwhjubj_)}(hhh](jp)}(h!``0`` - The timer was not pendingh]j9)}(hjKh](j?)}(h``0``h]h0}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubh - The timer was not pending}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMxhjIubah}(h]h ]h"]h$]h&]uh1johjFubjp)}(h-``1`` - The timer was pending and deactivatedh]j9)}(hjqh](j?)}(h``1``h]h1}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh( - The timer was pending and deactivated}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjoubah}(h]h ]h"]h$]h&]uh1johjFubeh}(h]h ]h"]h$]h&]j_juh1j_hjhhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_shutdown (C function)c.timer_shutdownhNtauh1hhjehhhNhNubh)}(hhh](h)}(h-int timer_shutdown (struct timer_list *timer)h]h)}(h,int timer_shutdown(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(htimer_shutdownh]h)}(htimer_shutdownh]htimer_shutdown}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.timer_shutdownasbuh1hhjubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h'Deactivate a timer and prevent rearmingh]h'Deactivate a timer and prevent rearming}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be deactivated **Description** The function does not wait for an eventually running timer callback on a different CPU but it prevents rearming of the timer. Any attempt to arm **timer** after this function returns will be silently ignored. This function is useful for teardown code and should only be used when timer_shutdown_sync() cannot be invoked due to locking or context constraints. **Return** * ``0`` - The timer was not pending * ``1`` - The timer was pendingh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThe function does not wait for an eventually running timer callback on a different CPU but it prevents rearming of the timer. Any attempt to arm **timer** after this function returns will be silently ignored.h](hThe function does not wait for an eventually running timer callback on a different CPU but it prevents rearming of the timer. Any attempt to arm }(hj hhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh6 after this function returns will be silently ignored.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis function is useful for teardown code and should only be used when timer_shutdown_sync() cannot be invoked due to locking or context constraints.h]hThis function is useful for teardown code and should only be used when timer_shutdown_sync() cannot be invoked due to locking or context constraints.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h **Return**h]jz)}(hj?h]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj_)}(hhh](jp)}(h!``0`` - The timer was not pendingh]j9)}(hjZh](j?)}(h``0``h]h0}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubh - The timer was not pending}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjXubah}(h]h ]h"]h$]h&]uh1johjUubjp)}(h``1`` - The timer was pendingh]j9)}(hjh](j?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - The timer was pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj~ubah}(h]h ]h"]h$]h&]uh1johjUubeh}(h]h ]h"]h$]h&]j_juh1j_hjwhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"timer_delete_sync_try (C function)c.timer_delete_sync_tryhNtauh1hhjehhhNhNubh)}(hhh](h)}(h4int timer_delete_sync_try (struct timer_list *timer)h]h)}(h3int timer_delete_sync_try(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(htimer_delete_sync_tryh]h)}(htimer_delete_sync_tryh]htimer_delete_sync_try}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timer_listh]h timer_list}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj'modnameN classnameNjcjf)}ji]jl)}j_jsbc.timer_delete_sync_tryasbuh1hhjubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hTry to deactivate a timerh]hTry to deactivate a timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX)**Parameters** ``struct timer_list *timer`` Timer to deactivate **Description** This function tries to deactivate a timer. On success the timer is not queued and the timer callback function is not running on any CPU. This function does not guarantee that the timer cannot be rearmed right after dropping the base lock. That needs to be prevented by the calling code if necessary. **Return** * ``0`` - The timer was not pending * ``1`` - The timer was pending and deactivated * ``-1`` - The timer callback function is running on a different CPUh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(h1``struct timer_list *timer`` Timer to deactivate h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j9)}(hTimer to deactivateh]hTimer to deactivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis function tries to deactivate a timer. On success the timer is not queued and the timer callback function is not running on any CPU.h]hThis function tries to deactivate a timer. On success the timer is not queued and the timer callback function is not running on any CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hThis function does not guarantee that the timer cannot be rearmed right after dropping the base lock. That needs to be prevented by the calling code if necessary.h]hThis function does not guarantee that the timer cannot be rearmed right after dropping the base lock. That needs to be prevented by the calling code if necessary.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj_)}(hhh](jp)}(h"``0`` - The timer was not pendingh]j9)}(hjWh](j?)}(h``0``h]h0}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubh - The timer was not pending}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjUubah}(h]h ]h"]h$]h&]uh1johjRubjp)}(h.``1`` - The timer was pending and deactivatedh]j9)}(hj}h](j?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh) - The timer was pending and deactivated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj{ubah}(h]h ]h"]h$]h&]uh1johjRubjp)}(hB``-1`` - The timer callback function is running on a different CPUh]j9)}(hjh](j?)}(h``-1``h]h-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh< - The timer callback function is running on a different CPU}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjRubeh}(h]h ]h"]h$]h&]j_juh1j_hjthMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌtimer_delete_sync (C function)c.timer_delete_synchNtauh1hhjehhhNhNubh)}(hhh](h)}(h0int timer_delete_sync (struct timer_list *timer)h]h)}(h/int timer_delete_sync(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMaubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMaubh)}(htimer_delete_synch]h)}(htimer_delete_synch]htimer_delete_sync}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMaubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hj*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hhh]h)}(h timer_listh]h timer_list}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jl)}j_jsbc.timer_delete_syncasbuh1hhj&ubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMaubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMahjhhubj )}(hhh]j9)}(h6Deactivate a timer and wait for the handler to finish.h]h6Deactivate a timer and wait for the handler to finish.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMahjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMaubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be deactivated **Description** Synchronization rules: Callers must prevent restarting of the timer, otherwise this function is meaningless. It must not be called from interrupt contexts unless the timer is an irqsafe one. The caller must not hold locks which would prevent completion of the timer's callback function. The timer's handler must not call add_timer_on(). Upon exit the timer is not queued and the handler is not running on any CPU. For !irqsafe timers, the caller must not hold locks that are held in interrupt context. Even if the lock has nothing to do with the timer in question. Here's why:: CPU0 CPU1 ---- ---- call_timer_fn(); base->running_timer = mytimer; spin_lock_irq(somelock); spin_lock(somelock); timer_delete_sync(mytimer); while (base->running_timer == mytimer); Now timer_delete_sync() will never return and never release somelock. The interrupt on the other CPU is waiting to grab somelock but it has interrupted the softirq that CPU0 is waiting to finish. This function cannot guarantee that the timer is not rearmed again by some concurrent or preempting code, right after it dropped the base lock. If there is the possibility of a concurrent rearm then the return value of the function is meaningless. If such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead. **Return** * ``0`` - The timer was not pending * ``1`` - The timer was pending and deactivatedh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehjubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]j?)}(hjh]hstruct timer_list *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMbhjubj)}(hhh]j9)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhjubj9)}(hXSynchronization rules: Callers must prevent restarting of the timer, otherwise this function is meaningless. It must not be called from interrupt contexts unless the timer is an irqsafe one. The caller must not hold locks which would prevent completion of the timer's callback function. The timer's handler must not call add_timer_on(). Upon exit the timer is not queued and the handler is not running on any CPU.h]hXSynchronization rules: Callers must prevent restarting of the timer, otherwise this function is meaningless. It must not be called from interrupt contexts unless the timer is an irqsafe one. The caller must not hold locks which would prevent completion of the timer’s callback function. The timer’s handler must not call add_timer_on(). Upon exit the timer is not queued and the handler is not running on any CPU.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjubj9)}(hFor !irqsafe timers, the caller must not hold locks that are held in interrupt context. Even if the lock has nothing to do with the timer in question. Here's why::h]hFor !irqsafe timers, the caller must not hold locks that are held in interrupt context. Even if the lock has nothing to do with the timer in question. Here’s why:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMjhjubj)}(hXCPU0 CPU1 ---- ---- call_timer_fn(); base->running_timer = mytimer; spin_lock_irq(somelock); spin_lock(somelock); timer_delete_sync(mytimer); while (base->running_timer == mytimer);h]hXCPU0 CPU1 ---- ---- call_timer_fn(); base->running_timer = mytimer; spin_lock_irq(somelock); spin_lock(somelock); timer_delete_sync(mytimer); while (base->running_timer == mytimer);}hj]sbah}(h]h ]h"]h$]h&]jj uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMnhjubj9)}(hNow timer_delete_sync() will never return and never release somelock. The interrupt on the other CPU is waiting to grab somelock but it has interrupted the softirq that CPU0 is waiting to finish.h]hNow timer_delete_sync() will never return and never release somelock. The interrupt on the other CPU is waiting to grab somelock but it has interrupted the softirq that CPU0 is waiting to finish.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjubj9)}(hThis function cannot guarantee that the timer is not rearmed again by some concurrent or preempting code, right after it dropped the base lock. If there is the possibility of a concurrent rearm then the return value of the function is meaningless.h]hThis function cannot guarantee that the timer is not rearmed again by some concurrent or preempting code, right after it dropped the base lock. If there is the possibility of a concurrent rearm then the return value of the function is meaningless.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hjubj9)}(hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.h]hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj_)}(hhh](jp)}(h!``0`` - The timer was not pendingh]j9)}(hjh](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh - The timer was not pending}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(h-``1`` - The timer was pending and deactivatedh]j9)}(hjh](j?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh( - The timer was pending and deactivated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_juh1j_hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ timer_shutdown_sync (C function)c.timer_shutdown_synchNtauh1hhjehhhNhNubh)}(hhh](h)}(h2int timer_shutdown_sync (struct timer_list *timer)h]h)}(h1int timer_shutdown_sync(struct timer_list *timer)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"hhhj4hMubh)}(htimer_shutdown_synch]h)}(htimer_shutdown_synch]htimer_shutdown_sync}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMubj )}(h(struct timer_list *timer)h]j&)}(hstruct timer_list *timerh](j+)}(hj.h]hstruct}(hjchhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubh)}(hhh]h)}(h timer_listh]h timer_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jIsbc.timer_shutdown_syncasbuh1hhj_ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubah}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj4hMhjhhubj )}(hhh]j9)}(h%Shutdown a timer and prevent rearmingh]h%Shutdown a timer and prevent rearming}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjehNhNubjp)}(hX**Parameters** ``struct timer_list *timer`` The timer to be shutdown **Description** When the function returns it is guaranteed that: - **timer** is not queued - The callback function of **timer** is not running - **timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. See timer_delete_sync() for synchronization rules. This function is useful for final teardown of an infrastructure where the timer is subject to a circular dependency problem. A common pattern for this is a timer and a workqueue where the timer can schedule work and work can arm the timer. On shutdown the workqueue must be destroyed and the timer must be prevented from rearming. Unless the code has conditionals like 'if (mything->in_shutdown)' to prevent that there is no way to get this correct with timer_delete_sync(). timer_shutdown_sync() is solving the problem. The correct ordering of calls in this case is: timer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `); After this 'mything' can be safely freed. This obviously implies that the timer is not required to be functional for the rest of the shutdown operation. **Return** * ``0`` - The timer was not pending * ``1`` - The timer was pendingh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(h6``struct timer_list *timer`` The timer to be shutdown h](j)}(h``struct timer_list *timer``h]j?)}(hj'h]hstruct timer_list *timer}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj!ubj)}(hhh]j9)}(hThe timer to be shutdownh]hThe timer to be shutdown}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]j)}(hWhen the function returns it is guaranteed that: - **timer** is not queued - The callback function of **timer** is not running - **timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h](j)}(h0When the function returns it is guaranteed that:h]h0When the function returns it is guaranteed that:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj{ubj)}(hhh]j_)}(hhh](jp)}(h**timer** is not queuedh]j9)}(hjh](jz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not queued}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(h1The callback function of **timer** is not runningh]j9)}(hjh](hThe callback function of }(hjhhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not running}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hX**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h]j9)}(hW**timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored.h](jz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh0 cannot be enqueued again. Any attempt to rearm }(hjhhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is silently ignored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_j_uh1j_hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjxubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h2See timer_delete_sync() for synchronization rules.h]h2See timer_delete_sync() for synchronization rules.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h|This function is useful for final teardown of an infrastructure where the timer is subject to a circular dependency problem.h]h|This function is useful for final teardown of an infrastructure where the timer is subject to a circular dependency problem.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hX]A common pattern for this is a timer and a workqueue where the timer can schedule work and work can arm the timer. On shutdown the workqueue must be destroyed and the timer must be prevented from rearming. Unless the code has conditionals like 'if (mything->in_shutdown)' to prevent that there is no way to get this correct with timer_delete_sync().h]hXaA common pattern for this is a timer and a workqueue where the timer can schedule work and work can arm the timer. On shutdown the workqueue must be destroyed and the timer must be prevented from rearming. Unless the code has conditionals like ‘if (mything->in_shutdown)’ to prevent that there is no way to get this correct with timer_delete_sync().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h\timer_shutdown_sync() is solving the problem. The correct ordering of calls in this case is:h]h\timer_shutdown_sync() is solving the problem. The correct ordering of calls in this case is:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjU)}(httimer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `); h]j9)}(hstimer_shutdown_sync(:c:type:`mything->timer `); workqueue_destroy(:c:type:`mything->workqueue `);h](htimer_shutdown_sync(}(hjuhhhNhNubh)}(h":c:type:`mything->timer `h]j?)}(hjh]hmything->timer}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjmythinguh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjuubh); workqueue_destroy(}(hjuhhhNhNubh)}(h&:c:type:`mything->workqueue `h]j?)}(hjh]hmything->workqueue}(hjhhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjmythinguh1hhjhMhjuubh);}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMhjqubah}(h]h ]h"]h$]h&]uh1jThjhMhjubj9)}(h)After this 'mything' can be safely freed.h]h-After this ‘mything’ can be safely freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(hnThis obviously implies that the timer is not required to be functional for the rest of the shutdown operation.h]hnThis obviously implies that the timer is not required to be functional for the rest of the shutdown operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj_)}(hhh](jp)}(h!``0`` - The timer was not pendingh]j9)}(hj h](j?)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh - The timer was not pending}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj ubah}(h]h ]h"]h$]h&]uh1johjubjp)}(h``1`` - The timer was pendingh]j9)}(hj1h](j?)}(h``1``h]h1}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh - The timer was pending}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj/ubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_juh1j_hj(hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjehhhNhNubeh}(h]time-and-timer-routinesah ]h"]time and timer routinesah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(hHigh-resolution timersh]hHigh-resolution timers}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhhhhhK1ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_set (C function) c.ktime_sethNtauh1hhjjhhhNhNubh)}(hhh](h)}(h=ktime_t ktime_set (const s64 secs, const unsigned long nsecs)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj)}(hhh]j9)}(hseconds to seth]hseconds to set}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``const unsigned long nsecs`` nanoseconds to set h](j)}(h``const unsigned long nsecs``h]j?)}(hj@h]hconst unsigned long nsecs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK hj:ubj)}(hhh]j9)}(hnanoseconds to seth]hnanoseconds to set}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhK hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhK hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hj{h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hjubj9)}(h(The ktime_t representation of the value.h]h(The ktime_t representation of the value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_compare (C function)c.ktime_comparehNtauh1hhjjhhhNhNubh)}(hhh](h)}(h:int ktime_compare (const ktime_t cmp1, const ktime_t cmp2)h]h)}(h9int ktime_compare(const ktime_t cmp1, const ktime_t cmp2)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKTubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKTubh)}(h ktime_compareh]h)}(h ktime_compareh]h ktime_compare}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKTubj )}(h((const ktime_t cmp1, const ktime_t cmp2)h](j&)}(hconst ktime_t cmp1h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.ktime_compareasbuh1hhjubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcmp1h]hcmp1}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst ktime_t cmp2h](j+)}(hj<*h]hconst}(hjbhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^ubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j7c.ktime_compareasbuh1hhj^ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKThjhhubj )}(hhh]j9)}(h9Compares two ktime_t variables for less, greater or equalh]h9Compares two ktime_t variables for less, greater or equal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKTubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]j?)}(hjh]hconst ktime_t cmp1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKUhjubj)}(hhh]j9)}(h comparable1h]h comparable1}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hKUhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKUhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j?)}(hjPh]hconst ktime_t cmp2}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKVhjJubj)}(hhh]j9)}(h comparable2h]h comparable2}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehKVhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKVhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubj9)}(hJ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0h]hJ... cmp1 < cmp2: return <0 cmp1 == cmp2: return 0 cmp1 > cmp2: return >0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_after (C function) c.ktime_afterhNtauh1hhjjhhhNhNubh)}(hhh](h)}(h9bool ktime_after (const ktime_t cmp1, const ktime_t cmp2)h]h)}(h8bool ktime_after(const ktime_t cmp1, const ktime_t cmp2)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKgubh)}(h ktime_afterh]h)}(h ktime_afterh]h ktime_after}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKgubj )}(h((const ktime_t cmp1, const ktime_t cmp2)h](j&)}(hconst ktime_t cmp1h](j+)}(hj<*h]hconst}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hktime_th]hktime_t}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_jsb c.ktime_afterasbuh1hhjubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcmp1h]hcmp1}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst ktime_t cmp2h](j+)}(hj<*h]hconst}(hjqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubh)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jF c.ktime_afterasbuh1hhjmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubh)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKgubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKghjhhubj )}(hhh]j9)}(h6Compare if a ktime_t value is bigger than another one.h]h6Compare if a ktime_t value is bigger than another one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKghjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKgubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened after cmp2.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]j?)}(hj&h]hconst ktime_t cmp1}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhhj ubj)}(hhh]j9)}(h comparable1h]h comparable1}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hKhhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j?)}(hj_h]hconst ktime_t cmp2}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKihjYubj)}(hhh]j9)}(h comparable2h]h comparable2}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthKihjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKihjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubj9)}(h!true if cmp1 happened after cmp2.h]h!true if cmp1 happened after cmp2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌktime_before (C function)c.ktime_beforehNtauh1hhjjhhhNhNubh)}(hhh](h)}(h:bool ktime_before (const ktime_t cmp1, const ktime_t cmp2)h]h)}(h9bool ktime_before(const ktime_t cmp1, const ktime_t cmp2)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKsubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKsubh)}(h ktime_beforeh]h)}(h ktime_beforeh]h ktime_before}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKsubj )}(h((const ktime_t cmp1, const ktime_t cmp2)h](j&)}(hconst ktime_t cmp1h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hktime_th]hktime_t}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj;modnameN classnameNjcjf)}ji]jl)}j_jsbc.ktime_beforeasbuh1hhjubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcmp1h]hcmp1}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst ktime_t cmp2h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj|ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jUc.ktime_beforeasbuh1hhj|ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh)}(hcmp2h]hcmp2}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKsubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKshjhhubj )}(hhh]j9)}(h7Compare if a ktime_t value is smaller than another one.h]h7Compare if a ktime_t value is smaller than another one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKsubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``const ktime_t cmp1`` comparable1 ``const ktime_t cmp2`` comparable2 **Return** true if cmp1 happened before cmp2.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]j?)}(hj5h]hconst ktime_t cmp1}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKthj/ubj)}(hhh]j9)}(h comparable1h]h comparable1}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhKthjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKthj,ubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]j?)}(hjnh]hconst ktime_t cmp2}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKuhjhubj)}(hhh]j9)}(h comparable2h]h comparable2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKuhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKuhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubj9)}(h"true if cmp1 happened before cmp2.h]h"true if cmp1 happened before cmp2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%ktime_to_timespec64_cond (C function)c.ktime_to_timespec64_condhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hGbool ktime_to_timespec64_cond (const ktime_t kt, struct timespec64 *ts)h]h)}(hFbool ktime_to_timespec64_cond(const ktime_t kt, struct timespec64 *ts)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hktime_to_timespec64_condh]h)}(hktime_to_timespec64_condh]hktime_to_timespec64_cond}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h)(const ktime_t kt, struct timespec64 *ts)h](j&)}(hconst ktime_t kth](j+)}(hj<*h]hconst}(hj*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hhh]h)}(hktime_th]hktime_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jl)}j_jsbc.ktime_to_timespec64_condasbuh1hhj&ubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hkth]hkt}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubj&)}(hstruct timespec64 *tsh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jdc.ktime_to_timespec64_condasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htsh]hts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hRconvert a ktime_t variable to timespec64 format only if the variable contains datah]hRconvert a ktime_t variable to timespec64 format only if the variable contains data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``const ktime_t kt`` the ktime_t variable to convert ``struct timespec64 *ts`` the timespec variable to store the result in **Return** ``true`` if there was a successful conversion, ``false`` if kt was 0.h](j9)}(h**Parameters**h]jz)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj,ubj)}(hhh](j)}(h5``const ktime_t kt`` the ktime_t variable to convert h](j)}(h``const ktime_t kt``h]j?)}(hjQh]hconst ktime_t kt}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjKubj)}(hhh]j9)}(hthe ktime_t variable to converth]hthe ktime_t variable to convert}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjHubj)}(hG``struct timespec64 *ts`` the timespec variable to store the result in h](j)}(h``struct timespec64 *ts``h]j?)}(hjh]hstruct timespec64 *ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubj)}(hhh]j9)}(h,the timespec variable to store the result inh]h,the timespec variable to store the result in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj,ubj9)}(hE``true`` if there was a successful conversion, ``false`` if kt was 0.h](j?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh' if there was a successful conversion, }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if kt was 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_sleeper (C struct)c.hrtimer_sleeperhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hhrtimer_sleeperh]h)}(hstruct hrtimer_sleeperh](j+)}(hj.h]hstruct}(hj*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&hhhj7hKubh)}(hhrtimer_sleeperh]h)}(hj$h]hhrtimer_sleeper}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj7hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj7hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hKhjhhubj )}(hhh]j9)}(hsimple sleeper structureh]hsimple sleeper structure}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKVhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hKubeh}(h]h ](j-structeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Definition**:: struct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; }; **Members** ``timer`` embedded timer structure ``task`` task to wake uph](j9)}(h**Definition**::h](jz)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKZhjubj)}(hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };h]hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };}hjsbah}(h]h ]h"]h$]h&]jj uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhK\hjubj9)}(h **Members**h]jz)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKahjubj)}(hhh](j)}(h#``timer`` embedded timer structure h](j)}(h ``timer``h]j?)}(hjh]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKXhjubj)}(hhh]j9)}(hembedded timer structureh]hembedded timer structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKXhjubj)}(h``task`` task to wake uph](j)}(h``task``h]j?)}(hjh]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKXhj ubj)}(hhh]j9)}(htask to wake uph]htask to wake up}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKYhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKXhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubj9)}(h**Description**h]jz)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhK\hjjhhubj9)}(h,task is set to NULL, when the timer expires.h]h,task is set to NULL, when the timer expires.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKYhjjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_start (C function)c.hrtimer_starthNtauh1hhjjhhhNhNubh)}(hhh](h)}(hUvoid hrtimer_start (struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h]h)}(hTvoid hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h hrtimer_starth]h)}(h hrtimer_starth]h hrtimer_start}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(hB(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.hrtimer_startasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h ktime_t timh](h)}(hhh]h)}(hktime_th]hktime_t}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]j c.hrtimer_startasbuh1hhj>ubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(htimh]htim}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst enum hrtimer_mode modeh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(henumh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.hrtimer_startasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhjjhNhNubjp)}(hX+**Parameters** ``struct hrtimer *timer`` the timer to be added ``ktime_t tim`` expiry time ``const enum hrtimer_mode mode`` timer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h](j9)}(h**Parameters**h]jz)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhj6ubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]j?)}(hj[h]hstruct hrtimer *timer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjUubj)}(hhh]j9)}(hthe timer to be addedh]hthe timer to be added}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjRubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]j?)}(hjh]h ktime_t tim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubj)}(hhh]j9)}(h expiry timeh]h expiry time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubj)}(h``const enum hrtimer_mode mode`` timer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h](j)}(h ``const enum hrtimer_mode mode``h]j?)}(hjh]hconst enum hrtimer_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubj)}(hhh]j9)}(htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h]htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"hrtimer_get_remaining (C function)c.hrtimer_get_remaininghNtauh1hhjjhhhNhNubh)}(hhh](h)}(h;ktime_t hrtimer_get_remaining (const struct hrtimer *timer)h]h)}(h:ktime_t hrtimer_get_remaining(const struct hrtimer *timer)h](h)}(hhh]h)}(hktime_th]hktime_t}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_hrtimer_get_remainingsbc.hrtimer_get_remainingasbuh1hhj#hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#hhhjKhMubh)}(hhrtimer_get_remainingh]h)}(hjHh]hhrtimer_get_remaining}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhjKhMubj )}(h(const struct hrtimer *timer)h]j&)}(hconst struct hrtimer *timerh](j+)}(hj<*h]hconst}(hjyhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jFc.hrtimer_get_remainingasbuh1hhjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubah}(h]h ]h"]h$]h&]jj uh1jhj#hhhjKhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjKhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjKhMhjhhubj )}(hhh]j9)}(h get remaining time for the timerh]h get remaining time for the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjKhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhjjhNhNubjp)}(hC**Parameters** ``const struct hrtimer *timer`` the timer to readh](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhj1ubj)}(hhh]j)}(h1``const struct hrtimer *timer`` the timer to readh](j)}(h``const struct hrtimer *timer``h]j?)}(hjVh]hconst struct hrtimer *timer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjPubj)}(hhh]j9)}(hthe timer to readh]hthe timer to read}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_is_queued (C function)c.hrtimer_is_queuedhNtauh1hhjjhhhNhNubh)}(hhh](h)}(h.bool hrtimer_is_queued (struct hrtimer *timer)h]h)}(h-bool hrtimer_is_queued(struct hrtimer *timer)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hhrtimer_is_queuedh]h)}(hhrtimer_is_queuedh]hhrtimer_is_queued}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct hrtimer *timer)h]j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.hrtimer_is_queuedasbuh1hhjubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h0check, whether the timer is on one of the queuesh]h0check, whether the timer is on one of the queues}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``struct hrtimer *timer`` Timer to check **Return** True if the timer is queued, false otherwise **Description** The function can be used lockless, but it gives only a current snapshot.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM#hjubj)}(hhh]j)}(h)``struct hrtimer *timer`` Timer to check h](j)}(h``struct hrtimer *timer``h]j?)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjubj)}(hhh]j9)}(hTimer to checkh]hTimer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM"hjubj9)}(h,True if the timer is queued, false otherwiseh]h,True if the timer is queued, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM"hjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM$hjubj9)}(hHThe function can be used lockless, but it gives only a current snapshot.h]hHThe function can be used lockless, but it gives only a current snapshot.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM#hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$hrtimer_update_function (C function)c.hrtimer_update_functionhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hhvoid hrtimer_update_function (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *))h]h)}(hfvoid hrtimer_update_function(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*))h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM6ubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhjehM6ubh)}(hhrtimer_update_functionh]h)}(hhrtimer_update_functionh]hhrtimer_update_function}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjehM6ubj )}(hJ(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*))h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jzsbc.hrtimer_update_functionasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimer_restarth]hhrtimer_restart}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jc.hrtimer_update_functionasbuh1hhjubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hj6h]h(}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hfunctionh]hfunction}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjh]h)}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_update_functionasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjShhhjehM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjehM6ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjehM6hjLhhubj )}(hhh]j9)}(h$Update the timer's callback functionh]h&Update the timer’s callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM6hjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjehM6ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(hXS**Parameters** ``struct hrtimer *timer`` Timer to update ``enum hrtimer_restart (*function)(struct hrtimer *)`` New callback function **Description** Only safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).h](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM:hj ubj)}(hhh](j)}(h*``struct hrtimer *timer`` Timer to update h](j)}(h``struct hrtimer *timer``h]j?)}(hjEh]hstruct hrtimer *timer}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM7hj?ubj)}(hhh]j9)}(hTimer to updateh]hTimer to update}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhM7hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhM7hj<ubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` New callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]j?)}(hj~h]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM8hjxubj)}(hhh]j9)}(hNew callback functionh]hNew callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM8hj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM:hj ubj9)}(hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).h]hOnly safe to call if the timer is not enqueued. Can be called in the callback function if the timer is not enqueued at the same time (see the comments above HRTIMER_STATE_ENQUEUED).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM9hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ hrtimer_forward_now (C function)c.hrtimer_forward_nowhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hAu64 hrtimer_forward_now (struct hrtimer *timer, ktime_t interval)h]h)}(h@u64 hrtimer_forward_now(struct hrtimer *timer, ktime_t interval)h](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_hrtimer_forward_nowsbc.hrtimer_forward_nowasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMQubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj"hMQubh)}(hhrtimer_forward_nowh]h)}(hjh]hhrtimer_forward_now}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj"hMQubj )}(h)(struct hrtimer *timer, ktime_t interval)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]jc.hrtimer_forward_nowasbuh1hhjLubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubj&)}(hktime_t intervalh](h)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_forward_nowasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hintervalh]hinterval}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj"hMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj"hMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj"hMQhjhhubj )}(hhh]j9)}(h0forward the timer expiry so it expires after nowh]h0forward the timer expiry so it expires after now}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj"hMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhjjhNhNubjp)}(hX**Parameters** ``struct hrtimer *timer`` hrtimer to forward ``ktime_t interval`` the interval to forward **Description** It is a variant of hrtimer_forward(). The timer will expire after the current time of the hrtimer clock base. See hrtimer_forward() for details.h](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMUhj5ubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]j?)}(hjZh]hstruct hrtimer *timer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMRhjTubj)}(hhh]j9)}(hhrtimer to forwardh]hhrtimer to forward}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMRhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMRhjQubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]j?)}(hjh]hktime_t interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMShjubj)}(hhh]j9)}(hthe interval to forwardh]hthe interval to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMUhj5ubj9)}(hIt is a variant of hrtimer_forward(). The timer will expire after the current time of the hrtimer clock base. See hrtimer_forward() for details.h]hIt is a variant of hrtimer_forward(). The timer will expire after the current time of the hrtimer clock base. See hrtimer_forward() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMThj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_forward (C function)c.hrtimer_forwardhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hJu64 hrtimer_forward (struct hrtimer *timer, ktime_t now, ktime_t interval)h]h)}(hIu64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)h](h)}(hhh]h)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_hrtimer_forwardsbc.hrtimer_forwardasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj7hMubh)}(hhrtimer_forwardh]h)}(hj4h]hhrtimer_forward}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj7hMubj )}(h6(struct hrtimer *timer, ktime_t now, ktime_t interval)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j2c.hrtimer_forwardasbuh1hhjaubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]ubj&)}(h ktime_t nowh](h)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j2c.hrtimer_forwardasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnowh]hnow}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]ubj&)}(hktime_t intervalh](h)}(hhh]h)}(hktime_th]hktime_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]j2c.hrtimer_forwardasbuh1hhjubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hintervalh]hinterval}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(hforward the timer expiryh]hforward the timer expiry}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(hX**Parameters** ``struct hrtimer *timer`` hrtimer to forward ``ktime_t now`` forward past this time ``ktime_t interval`` the interval to forward **Description** Forward the timer expiry so it will expire in the future. .. note:: This only updates the timer expiry value and does not requeue the timer. There is also a variant of the function hrtimer_forward_now(). **Context** Can be safely called from the callback function of **timer**. If called from other contexts **timer** must neither be enqueued nor running the callback and the caller needs to take care of serialization. **Return** The number of overruns are returned.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]j?)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hhrtimer to forwardh]hhrtimer to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``ktime_t now`` forward past this time h](j)}(h``ktime_t now``h]j?)}(hjh]h ktime_t now}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hforward past this timeh]hforward past this time}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]j?)}(hj)h]hktime_t interval}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj#ubj)}(hhh]j9)}(hthe interval to forwardh]hthe interval to forward}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj9)}(h9Forward the timer expiry so it will expire in the future.h]h9Forward the timer expiry so it will expire in the future.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubhnote)}(hHThis only updates the timer expiry value and does not requeue the timer.h]j9)}(hjh]hHThis only updates the timer expiry value and does not requeue the timer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h>There is also a variant of the function hrtimer_forward_now().h]h>There is also a variant of the function hrtimer_forward_now().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjubj9)}(hCan be safely called from the callback function of **timer**. If called from other contexts **timer** must neither be enqueued nor running the callback and the caller needs to take care of serialization.h](h3Can be safely called from the callback function of }(hjhhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh . If called from other contexts }(hjhhhNhNubjz)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhf must neither be enqueued nor running the callback and the caller needs to take care of serialization.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj9)}(h$The number of overruns are returned.h]h$The number of overruns are returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#hrtimer_start_range_ns (C function)c.hrtimer_start_range_nshNtauh1hhjjhhhNhNubh)}(hhh](h)}(hlvoid hrtimer_start_range_ns (struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h]h)}(hkvoid hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@hhhjRhMubh)}(hhrtimer_start_range_nsh]h)}(hhrtimer_start_range_nsh]hhrtimer_start_range_ns}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhjRhMubj )}(hP(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj}ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jgsbc.hrtimer_start_range_nsasbuh1hhj}ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubj&)}(h ktime_t timh](h)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_start_range_nsasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(htimh]htim}(hj" hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubj&)}(h u64 delta_nsh](h)}(hhh]h)}(hu64h]hu64}(hj> hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj; ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj@ modnameN classnameNjcjf)}ji]jc.hrtimer_start_range_nsasbuh1hhj7 ubj=)}(h h]h }(hj\ hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7 ubh)}(hdelta_nsh]hdelta_ns}(hjj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7 ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubj&)}(hconst enum hrtimer_mode modeh](j+)}(hj<*h]hconst}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj+)}(hjh]henum}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.hrtimer_start_range_nsasbuh1hhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hmodeh]hmode}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubeh}(h]h ]h"]h$]h&]jj uh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhjRhMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhjRhMhj9hhubj )}(hhh]j9)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j* j4j* j5j6j7uh1hhhhjjhNhNubjp)}(hX[**Parameters** ``struct hrtimer *timer`` the timer to be added ``ktime_t tim`` expiry time ``u64 delta_ns`` "slack" range for the timer ``const enum hrtimer_mode mode`` timer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h](j9)}(h**Parameters**h]jz)}(hj4 h]h Parameters}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2 ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj. ubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]j?)}(hjS h]hstruct hrtimer *timer}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjM ubj)}(hhh]j9)}(hthe timer to be addedh]hthe timer to be added}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh hMhji ubah}(h]h ]h"]h$]h&]uh1jhjM ubeh}(h]h ]h"]h$]h&]uh1jhjh hMhjJ ubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]j?)}(hj h]h ktime_t tim}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]j9)}(h expiry timeh]h expiry time}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjJ ubj)}(h-``u64 delta_ns`` "slack" range for the timer h](j)}(h``u64 delta_ns``h]j?)}(hj h]h u64 delta_ns}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]j9)}(h"slack" range for the timerh]h“slack” range for the timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjJ ubj)}(h``const enum hrtimer_mode mode`` timer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h](j)}(h ``const enum hrtimer_mode mode``h]j?)}(hj h]hconst enum hrtimer_mode mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]j9)}(htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h]htimer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjJ ubeh}(h]h ]h"]h$]h&]uh1jhj. ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"hrtimer_try_to_cancel (C function)c.hrtimer_try_to_cancelhNtauh1hhjjhhhNhNubh)}(hhh](h)}(h1int hrtimer_try_to_cancel (struct hrtimer *timer)h]h)}(h0int hrtimer_try_to_cancel(struct hrtimer *timer)h](j)}(hinth]hint}(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM:ubj=)}(h h]h }(hjg hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjT hhhjf hM:ubh)}(hhrtimer_try_to_cancelh]h)}(hhrtimer_try_to_cancelh]hhrtimer_try_to_cancel}(hjy hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjT hhhjf hM:ubj )}(h(struct hrtimer *timer)h]j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j{ sbc.hrtimer_try_to_cancelasbuh1hhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(htimerh]htimer}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjT hhhjf hM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjP hhhjf hM:ubah}(h]jK ah ](jjeh"]h$]h&]jj)jhuh1hhjf hM:hjM hhubj )}(hhh]j9)}(htry to deactivate a timerh]htry to deactivate a timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM:hj hhubah}(h]h ]h"]h$]h&]uh1jhjM hhhjf hM:ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j0 j4j0 j5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``struct hrtimer *timer`` hrtimer to stop **Description** * 0 when the timer was not active * 1 when the timer was active * -1 when the timer is currently executing the callback function and cannot be stoppedh](j9)}(h**Parameters**h]jz)}(hj: h]h Parameters}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8 ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM>hj4 ubj)}(hhh]j)}(h*``struct hrtimer *timer`` hrtimer to stop h](j)}(h``struct hrtimer *timer``h]j?)}(hjY h]hstruct hrtimer *timer}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjW ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM;hjS ubj)}(hhh]j9)}(hhrtimer to stoph]hhrtimer to stop}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjn hM;hjo ubah}(h]h ]h"]h$]h&]uh1jhjS ubeh}(h]h ]h"]h$]h&]uh1jhjn hM;hjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM=hj4 ubjU)}(h* 0 when the timer was not active * 1 when the timer was active * -1 when the timer is currently executing the callback function and cannot be stoppedh]j_)}(hhh](jp)}(h0 when the timer was not activeh]j9)}(hj h]h0 when the timer was not active}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM>hj ubah}(h]h ]h"]h$]h&]uh1johj ubjp)}(h1 when the timer was activeh]j9)}(hj h]h1 when the timer was active}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM?hj ubah}(h]h ]h"]h$]h&]uh1johj ubjp)}(hT-1 when the timer is currently executing the callback function and cannot be stoppedh]j9)}(hT-1 when the timer is currently executing the callback function and cannot be stoppedh]hT-1 when the timer is currently executing the callback function and cannot be stopped}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM@hj ubah}(h]h ]h"]h$]h&]uh1johj ubeh}(h]h ]h"]h$]h&]j_juh1j_hj hM>hj ubah}(h]h ]h"]h$]h&]uh1jThj hM>hj4 ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_cancel (C function)c.hrtimer_cancelhNtauh1hhjjhhhNhNubh)}(hhh](h)}(h*int hrtimer_cancel (struct hrtimer *timer)h]h)}(h)int hrtimer_cancel(struct hrtimer *timer)h](j)}(hinth]hint}(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj" hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hj5 hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj" hhhj4 hMubh)}(hhrtimer_cancelh]h)}(hhrtimer_cancelh]hhrtimer_cancel}(hjG hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj" hhhj4 hMubj )}(h(struct hrtimer *timer)h]j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjc hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj_ ubj=)}(h h]h }(hjp hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ ubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jI sbc.hrtimer_cancelasbuh1hhj_ ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubh)}(htimerh]htimer}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ ubah}(h]h ]h"]h$]h&]jj uh1jhj" hhhj4 hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj4 hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj4 hMhj hhubj )}(hhh]j9)}(h2cancel a timer and wait for the handler to finish.h]h2cancel a timer and wait for the handler to finish.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj4 hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``struct hrtimer *timer`` the timer to be cancelled **Return** 0 when the timer was not active 1 when the timer was activeh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j)}(h4``struct hrtimer *timer`` the timer to be cancelled h](j)}(h``struct hrtimer *timer``h]j?)}(hj'h]hstruct hrtimer *timer}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj!ubj)}(hhh]j9)}(hthe timer to be cancelledh]hthe timer to be cancelled}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj9)}(h;0 when the timer was not active 1 when the timer was activeh]h;0 when the timer was not active 1 when the timer was active}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$__hrtimer_get_remaining (C function)c.__hrtimer_get_remaininghNtauh1hhjjhhhNhNubh)}(hhh](h)}(hJktime_t __hrtimer_get_remaining (const struct hrtimer *timer, bool adjust)h]h)}(hIktime_t __hrtimer_get_remaining(const struct hrtimer *timer, bool adjust)h](h)}(hhh]h)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j___hrtimer_get_remainingsbc.__hrtimer_get_remainingasbuh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h__hrtimer_get_remainingh]h)}(hjh]h__hrtimer_get_remaining}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h*(const struct hrtimer *timer, bool adjust)h](j&)}(hconst struct hrtimer *timerh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj4modnameN classnameNjcjf)}ji]jc.__hrtimer_get_remainingasbuh1hhjubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h bool adjusth](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hadjusth]hadjust}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h get remaining time for the timerh]h get remaining time for the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``const struct hrtimer *timer`` the timer to read ``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh](j)}(h2``const struct hrtimer *timer`` the timer to read h](j)}(h``const struct hrtimer *timer``h]j?)}(hj h]hconst struct hrtimer *timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hthe timer to readh]hthe timer to read}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``bool adjust`` adjust relative timers when CONFIG_TIME_LOW_RES=yh](j)}(h``bool adjust``h]j?)}(hjCh]h bool adjust}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj=ubj)}(hhh]j9)}(h1adjust relative timers when CONFIG_TIME_LOW_RES=yh]h1adjust relative timers when CONFIG_TIME_LOW_RES=y}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌhrtimer_setup (C function)c.hrtimer_setuphNtauh1hhjjhhhNhNubh)}(hhh](h)}(hvoid hrtimer_setup (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *), clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hvoid hrtimer_setup(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMzubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMzubh)}(h hrtimer_setuph]h)}(h hrtimer_setuph]h hrtimer_setup}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMzubj )}(hv(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.hrtimer_setupasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j+)}(hjh]henum}(hjLhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjHubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubh)}(hhh]h)}(hhrtimer_restarth]hhrtimer_restart}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjlmodnameN classnameNjcjf)}ji]jc.hrtimer_setupasbuh1hhjHubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hfunctionh]hfunction}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjHubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_setupasbuh1hhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h)}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hclockid_t clock_idh](h)}(hhh]h)}(h clockid_th]h clockid_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj>modnameN classnameNjcjf)}ji]jc.hrtimer_setupasbuh1hhj5ubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubh)}(hclock_idh]hclock_id}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(henum hrtimer_mode modeh](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj}ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_setupasbuh1hhj}ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubh)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMzubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMzhjhhubj )}(hhh]j9)}(h%initialize a timer to the given clockh]h%initialize a timer to the given clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMzubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjjhNhNubjp)}(hX#**Parameters** ``struct hrtimer *timer`` the timer to be initialized ``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function ``clockid_t clock_id`` the clock to be used ``enum hrtimer_mode mode`` The modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT **Description** The PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM~hjubj)}(hhh](j)}(h6``struct hrtimer *timer`` the timer to be initialized h](j)}(h``struct hrtimer *timer``h]j?)}(hj6h]hstruct hrtimer *timer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM{hj0ubj)}(hhh]j9)}(hthe timer to be initializedh]hthe timer to be initialized}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhM{hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM{hj-ubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]j?)}(hjoh]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM|hjiubj)}(hhh]j9)}(hthe callback functionh]hthe callback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM|hj-ubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]j?)}(hjh]hclockid_t clock_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM}hjubj)}(hhh]j9)}(hthe clock to be usedh]hthe clock to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hj-ubj)}(h``enum hrtimer_mode mode`` The modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT h](j)}(h``enum hrtimer_mode mode``h]j?)}(hjh]henum hrtimer_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hThe modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFTh]hThe modes which are relevant for initialization: HRTIMER_MODE_ABS, HRTIMER_MODE_REL, HRTIMER_MODE_ABS_SOFT, HRTIMER_MODE_REL_SOFT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubjU)}(hThe PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh]j9)}(hThe PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is startedh]hThe PINNED variants of the above can be handed in, but the PINNED bit is ignored as pinning happens when the hrtimer is started}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj3ubah}(h]h ]h"]h$]h&]uh1jThjEhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#hrtimer_setup_on_stack (C function)c.hrtimer_setup_on_stackhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hvoid hrtimer_setup_on_stack (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *), clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hvoid hrtimer_setup_on_stack(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhhjzhMubh)}(hhrtimer_setup_on_stackh]h)}(hhrtimer_setup_on_stackh]hhrtimer_setup_on_stack}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhjzhMubj )}(hv(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*), clockid_t clock_id, enum hrtimer_mode mode)h](j&)}(hstruct hrtimer *timerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.hrtimer_setup_on_stackasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimer_restarth]hhrtimer_restart}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj;modnameN classnameNjcjf)}ji]jc.hrtimer_setup_on_stackasbuh1hhjubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hj6h]h(}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hfunctionh]hfunction}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_setup_on_stackasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hclockid_t clock_idh](h)}(hhh]h)}(h clockid_th]h clockid_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.hrtimer_setup_on_stackasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hclock_idh]hclock_id}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(henum hrtimer_mode modeh](j+)}(hjh]henum}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]jc.hrtimer_setup_on_stackasbuh1hhjLubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjzhMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1hhjzhMhjahhubj )}(hhh]j9)}(h"initialize a timer on stack memoryh]h"initialize a timer on stack memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjzhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(hXi**Parameters** ``struct hrtimer *timer`` The timer to be initialized ``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function ``clockid_t clock_id`` The clock to be used ``enum hrtimer_mode mode`` The timer mode **Description** Similar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh](j)}(h6``struct hrtimer *timer`` The timer to be initialized h](j)}(h``struct hrtimer *timer``h]j?)}(hjh]hstruct hrtimer *timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hThe timer to be initializedh]hThe timer to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``enum hrtimer_restart (*function)(struct hrtimer *)`` the callback function h](j)}(h6``enum hrtimer_restart (*function)(struct hrtimer *)``h]j?)}(hj>h]h2enum hrtimer_restart (*function)(struct hrtimer *)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj8ubj)}(hhh]j9)}(hthe callback functionh]hthe callback function}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubj)}(h,``clockid_t clock_id`` The clock to be used h](j)}(h``clockid_t clock_id``h]j?)}(hjwh]hclockid_t clock_id}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjqubj)}(hhh]j9)}(hThe clock to be usedh]hThe clock to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``enum hrtimer_mode mode`` The timer mode h](j)}(h``enum hrtimer_mode mode``h]j?)}(hjh]henum hrtimer_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hThe timer modeh]hThe timer mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj9)}(hcSimilar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.h]hcSimilar to hrtimer_setup(), except that this one must be used if struct hrtimer is in stack memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*hrtimer_sleeper_start_expires (C function)c.hrtimer_sleeper_start_expireshNtauh1hhjjhhhNhNubh)}(hhh](h)}(hWvoid hrtimer_sleeper_start_expires (struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h]h)}(hVvoid hrtimer_sleeper_start_expires(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj>hMubh)}(hhrtimer_sleeper_start_expiresh]h)}(hhrtimer_sleeper_start_expiresh]hhrtimer_sleeper_start_expires}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hMubj )}(h4(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j&)}(hstruct hrtimer_sleeper *slh](j+)}(hj.h]hstruct}(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hhh]h)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.hrtimer_sleeper_start_expiresasbuh1hhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hslh]hsl}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(henum hrtimer_mode modeh](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.hrtimer_sleeper_start_expiresasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmodeh]hmode}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj%hhubj )}(hhh]j9)}(hStart a hrtimer sleeper timerh]hStart a hrtimer sleeper timer}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjPhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhjjhNhNubjp)}(hX**Parameters** ``struct hrtimer_sleeper *sl`` sleeper to be started ``enum hrtimer_mode mode`` timer mode abs/rel **Description** Wrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjoubj)}(hhh](j)}(h5``struct hrtimer_sleeper *sl`` sleeper to be started h](j)}(h``struct hrtimer_sleeper *sl``h]j?)}(hjh]hstruct hrtimer_sleeper *sl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(hsleeper to be startedh]hsleeper to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``enum hrtimer_mode mode`` timer mode abs/rel h](j)}(h``enum hrtimer_mode mode``h]j?)}(hjh]henum hrtimer_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]j9)}(htimer mode abs/relh]htimer mode abs/rel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjoubj9)}(hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)h]hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+hrtimer_setup_sleeper_on_stack (C function) c.hrtimer_setup_sleeper_on_stackhNtauh1hhjjhhhNhNubh)}(hhh](h)}(hlvoid hrtimer_setup_sleeper_on_stack (struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hkvoid hrtimer_setup_sleeper_on_stack(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM#ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhj[hM#ubh)}(hhrtimer_setup_sleeper_on_stackh]h)}(hhrtimer_setup_sleeper_on_stackh]hhrtimer_setup_sleeper_on_stack}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhj[hM#ubj )}(hH(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j&)}(hstruct hrtimer_sleeper *slh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jpsb c.hrtimer_setup_sleeper_on_stackasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hslh]hsl}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hclockid_t clock_idh](h)}(hhh]h)}(h clockid_th]h clockid_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.hrtimer_setup_sleeper_on_stackasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hclock_idh]hclock_id}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(henum hrtimer_mode modeh](j+)}(hjh]henum}(hjDhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hhh]h)}(h hrtimer_modeh]h hrtimer_mode}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjdmodnameN classnameNjcjf)}ji]j c.hrtimer_setup_sleeper_on_stackasbuh1hhj@ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjIhhhj[hM#ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhj[hM#ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhj[hM#hjBhhubj )}(hhh]j9)}(h$initialize a sleeper in stack memoryh]h$initialize a sleeper in stack memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hM#ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjjhNhNubjp)}(h**Parameters** ``struct hrtimer_sleeper *sl`` sleeper to be initialized ``clockid_t clock_id`` the clock to be used ``enum hrtimer_mode mode`` timer mode abs/relh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM'hjubj)}(hhh](j)}(h9``struct hrtimer_sleeper *sl`` sleeper to be initialized h](j)}(h``struct hrtimer_sleeper *sl``h]j?)}(hjh]hstruct hrtimer_sleeper *sl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM$hjubj)}(hhh]j9)}(hsleeper to be initializedh]hsleeper to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(h,``clockid_t clock_id`` the clock to be used h](j)}(h``clockid_t clock_id``h]j?)}(hj2h]hclockid_t clock_id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM%hj,ubj)}(hhh]j9)}(hthe clock to be usedh]hthe clock to be used}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhM%hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM%hjubj)}(h-``enum hrtimer_mode mode`` timer mode abs/relh](j)}(h``enum hrtimer_mode mode``h]j?)}(hjkh]henum hrtimer_mode mode}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM'hjeubj)}(hhh]j9)}(htimer mode abs/relh]htimer mode abs/rel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM&hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjjhhhNhNubeh}(h]high-resolution-timersah ]h"]high-resolution timersah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hWait queues and Wake eventsh]hWait queues and Wake events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK=ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwaitqueue_active (C function)c.waitqueue_activehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int waitqueue_active (struct wait_queue_head *wq_head)h]h)}(h5int waitqueue_active(struct wait_queue_head *wq_head)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK`ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhK`ubh)}(hwaitqueue_activeh]h)}(hwaitqueue_activeh]hwaitqueue_active}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK`ubj )}(h!(struct wait_queue_head *wq_head)h]j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj;modnameN classnameNjcjf)}ji]jl)}j_jsbc.waitqueue_activeasbuh1hhjubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwq_headh]hwq_head}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK`ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK`ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK`hjhhubj )}(hhh]j_)}(hhh]jp)}(h(locklessly test for waiters on the queueh]j9)}(hjh]h(locklessly test for waiters on the queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhK`hjubah}(h]h ]h"]h$]h&]uh1johjhhhjhNubah}(h]h ]h"]h$]h&]j_j_uh1j_hjhK`hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK`ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue to test for waiters **Description** returns true if the wait list is not empty **NOTE** this function is lockless and requires care, incorrect usage _will_ lead to sporadic and non-obvious failure. Use either while holding wait_queue_head::lock or when used for wakeups with an extra smp_mb() like:: CPU0 - waker CPU1 - waiter for (;;) { @cond = true; prepare_to_wait(&wq_head, &wait, state); smp_mb(); // smp_mb() from set_current_state() if (waitqueue_active(wq_head)) if (@cond) wake_up(wq_head); break; schedule(); } finish_wait(&wq_head, &wait); Because without the explicit smp_mb() it's possible for the waitqueue_active() load to get hoisted over the **cond** store such that we'll observe an empty wait list while the waiter might not observe **cond**. Also note that this 'optimization' trades a spin_lock() for an smp_mb(), which (when the lock is uncontended) are of roughly equal cost.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKdhjubj)}(hhh]j)}(hF``struct wait_queue_head *wq_head`` the waitqueue to test for waiters h](j)}(h#``struct wait_queue_head *wq_head``h]j?)}(hjh]hstruct wait_queue_head *wq_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKahjubj)}(hhh]j9)}(h!the waitqueue to test for waitersh]h!the waitqueue to test for waiters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKchjubj9)}(h*returns true if the wait list is not emptyh]h*returns true if the wait list is not empty}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKbhjubj9)}(h**NOTE**h]jz)}(hjSh]hNOTE}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKdhjubj9)}(hmthis function is lockless and requires care, incorrect usage _will_ lead to sporadic and non-obvious failure.h]hmthis function is lockless and requires care, incorrect usage _will_ lead to sporadic and non-obvious failure.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKehjubj9)}(heUse either while holding wait_queue_head::lock or when used for wakeups with an extra smp_mb() like::h]hdUse either while holding wait_queue_head::lock or when used for wakeups with an extra smp_mb() like:}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhhjubj)}(hXCPU0 - waker CPU1 - waiter for (;;) { @cond = true; prepare_to_wait(&wq_head, &wait, state); smp_mb(); // smp_mb() from set_current_state() if (waitqueue_active(wq_head)) if (@cond) wake_up(wq_head); break; schedule(); } finish_wait(&wq_head, &wait);h]hXCPU0 - waker CPU1 - waiter for (;;) { @cond = true; prepare_to_wait(&wq_head, &wait, state); smp_mb(); // smp_mb() from set_current_state() if (waitqueue_active(wq_head)) if (@cond) wake_up(wq_head); break; schedule(); } finish_wait(&wq_head, &wait);}hjsbah}(h]h ]h"]h$]h&]jj uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKkhjubj9)}(hBecause without the explicit smp_mb() it's possible for the waitqueue_active() load to get hoisted over the **cond** store such that we'll observe an empty wait list while the waiter might not observe **cond**.h](hnBecause without the explicit smp_mb() it’s possible for the waitqueue_active() load to get hoisted over the }(hjhhhNhNubjz)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhW store such that we’ll observe an empty wait list while the waiter might not observe }(hjhhhNhNubjz)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKvhjubj9)}(hAlso note that this 'optimization' trades a spin_lock() for an smp_mb(), which (when the lock is uncontended) are of roughly equal cost.h]hAlso note that this ‘optimization’ trades a spin_lock() for an smp_mb(), which (when the lock is uncontended) are of roughly equal cost.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKzhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"wq_has_single_sleeper (C function)c.wq_has_single_sleeperhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj)}(hhh]j9)}(hwait queue headh]hwait queue head}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj3 h]h Description}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1 ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj9)}(h9Returns true of wq_head has only one sleeper on the list.h]h9Returns true of wq_head has only one sleeper on the list.}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubj9)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwq_has_sleeper (C function)c.wq_has_sleeperhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool wq_has_sleeper (struct wait_queue_head *wq_head)h]h)}(h4bool wq_has_sleeper(struct wait_queue_head *wq_head)h](j)}(hjh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hKubh)}(hwq_has_sleeperh]h)}(hwq_has_sleeperh]hwq_has_sleeper}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hKubj )}(h!(struct wait_queue_head *wq_head)h]j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sbc.wq_has_sleeperasbuh1hhj ubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hwq_headh]hwq_head}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hKubah}(h]jz ah ](jjeh"]h$]h&]jj)jhuh1hhj hKhj| hhubj )}(hhh]j9)}(h(check if there are any waiting processesh]h(check if there are any waiting processes}(hjF!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjC!hhubah}(h]h ]h"]h$]h&]uh1jhj| hhhj hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^!j4j^!j5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct wait_queue_head *wq_head`` wait queue head **Description** Returns true if wq_head has waiting processes Please refer to the comment for waitqueue_active.h](j9)}(h**Parameters**h]jz)}(hjh!h]h Parameters}(hjj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf!ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjb!ubj)}(hhh]j)}(h4``struct wait_queue_head *wq_head`` wait queue head h](j)}(h#``struct wait_queue_head *wq_head``h]j?)}(hj!h]hstruct wait_queue_head *wq_head}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj!ubj)}(hhh]j9)}(hwait queue headh]hwait queue head}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhj~!ubah}(h]h ]h"]h$]h&]uh1jhjb!ubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjb!ubj9)}(h-Returns true if wq_head has waiting processesh]h-Returns true if wq_head has waiting processes}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjb!ubj9)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjb!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwake_up_pollfree (C function)c.wake_up_pollfreehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7void wake_up_pollfree (struct wait_queue_head *wq_head)h]h)}(h6void wake_up_pollfree(struct wait_queue_head *wq_head)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubj=)}(h h]h }(hj%"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"hhhj$"hKubh)}(hwake_up_pollfreeh]h)}(hwake_up_pollfreeh]hwake_up_pollfree}(hj7"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj$"hKubj )}(h!(struct wait_queue_head *wq_head)h]j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hjS"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjO"ubj=)}(h h]h }(hj`"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjO"ubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hjq"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjs"modnameN classnameNjcjf)}ji]jl)}j_j9"sbc.wake_up_pollfreeasbuh1hhjO"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjO"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO"ubh)}(hwq_headh]hwq_head}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjK"ubah}(h]h ]h"]h$]h&]jj uh1jhj"hhhj$"hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"hhhj$"hKubah}(h]j "ah ](jjeh"]h$]h&]jj)jhuh1hhj$"hKhj "hhubj )}(hhh]j9)}(h,signal that a polled waitqueue is going awayh]h,signal that a polled waitqueue is going away}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj"hhubah}(h]h ]h"]h$]h&]uh1jhj "hhhj$"hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j"j4j"j5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the wait queue head **Description** In the very rare cases where a ->poll() implementation uses a waitqueue whose lifetime is tied to a task rather than to the 'struct file' being polled, this function must be called before the waitqueue is freed so that non-blocking polls (e.g. epoll) are notified that the queue is going away. The caller must also RCU-delay the freeing of the wait_queue_head, e.g. via an explicit synchronize_rcu() or call_rcu(), or via SLAB_TYPESAFE_BY_RCU.h](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj"ubj)}(hhh]j)}(h8``struct wait_queue_head *wq_head`` the wait queue head h](j)}(h#``struct wait_queue_head *wq_head``h]j?)}(hj#h]hstruct wait_queue_head *wq_head}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj#ubj)}(hhh]j9)}(hthe wait queue headh]hthe wait queue head}(hj0#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,#hKhj-#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj,#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubj9)}(h**Description**h]jz)}(hjR#h]h Description}(hjT#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP#ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj"ubj9)}(hX%In the very rare cases where a ->poll() implementation uses a waitqueue whose lifetime is tied to a task rather than to the 'struct file' being polled, this function must be called before the waitqueue is freed so that non-blocking polls (e.g. epoll) are notified that the queue is going away.h]hX)In the very rare cases where a ->poll() implementation uses a waitqueue whose lifetime is tied to a task rather than to the ‘struct file’ being polled, this function must be called before the waitqueue is freed so that non-blocking polls (e.g. epoll) are notified that the queue is going away.}(hjh#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj"ubj9)}(hThe caller must also RCU-delay the freeing of the wait_queue_head, e.g. via an explicit synchronize_rcu() or call_rcu(), or via SLAB_TYPESAFE_BY_RCU.h]hThe caller must also RCU-delay the freeing of the wait_queue_head, e.g. via an explicit synchronize_rcu() or call_rcu(), or via SLAB_TYPESAFE_BY_RCU.}(hjw#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event (C macro) c.wait_eventhNtauh1hhjhhhNhNubh)}(hhh](h)}(h wait_eventh]h)}(h wait_eventh]h)}(h wait_eventh]h)}(hj#h]h wait_event}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMNubah}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj#hMNubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj#hMNhj#hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj#hhhj#hMNubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j#j4j#j5j6j7uh1hhhhjhNhNubj9)}(h#``wait_event (wq_head, condition)``h]j?)}(hj#h]hwait_event (wq_head, condition)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMNhj#ubah}(h]h ]h"]h$]h&]uh1jThj$hMNhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition.h](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj $ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj0$h]hwq_head}(hj2$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMOhj*$ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjI$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjE$hMOhjF$ubah}(h]h ]h"]h$]h&]uh1jhj*$ubeh}(h]h ]h"]h$]h&]uh1jhjE$hMOhj'$ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hji$h]h condition}(hjk$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjg$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhjc$ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~$hMPhj$ubah}(h]h ]h"]h$]h&]uh1jhjc$ubeh}(h]h ]h"]h$]h&]uh1jhj~$hMPhj'$ubeh}(h]h ]h"]h$]h&]uh1jhj $ubj9)}(h**Description**h]jz)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj $ubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj$hhhNhNubjz)}(h **condition**h]h condition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh evaluates to true. The }(hj$hhhNhNubjz)}(h **condition**h]h condition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh$ is checked each time the waitqueue }(hj$hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh is woken up.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMQhj $ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj $ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_freezable (C macro)c.wait_event_freezablehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]h)}(hwait_event_freezableh]h)}(hj(%h]hwait_event_freezable}(hj2%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*%hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuubah}(h]h ]h"]h$]h&]jj juh1hjjhj&%hhhjE%hMuubah}(h]j!%ah ](jjeh"]h$]h&]jj)jhuh1hhjE%hMuhj#%hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj#%hhhjE%hMuubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j^%j4j^%j5j6j7uh1hhhhjhNhNubj9)}(h-``wait_event_freezable (wq_head, condition)``h]j?)}(hjd%h]h)wait_event_freezable (wq_head, condition)}(hjf%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjb%ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhjhhubjU)}(h.sleep (or freeze) until a condition gets true h]j9)}(h-sleep (or freeze) until a condition gets trueh]h-sleep (or freeze) until a condition gets true}(hj~%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuhjz%ubah}(h]h ]h"]h$]h&]uh1jThj%hMuhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE -- so as not to contribute to system load) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition.h](j9)}(h**Parameters**h]jz)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhj%ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj%h]hwq_head}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhj%ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMvhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMvhj%ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj%h]h condition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhj%ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMwhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMwhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hj,&h]h Description}(hj.&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*&ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhj%ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE -- so as not to contribute to system load) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](heThe process is put to sleep (TASK_INTERRUPTIBLE -- so as not to contribute to system load) until the }(hjB&hhhNhNubjz)}(h **condition**h]h condition}(hjJ&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB&ubh evaluates to true. The }(hjB&hhhNhNubjz)}(h **condition**h]h condition}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB&ubh$ is checked each time the waitqueue }(hjB&hhhNhNubjz)}(h **wq_head**h]hwq_head}(hjn&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB&ubh is woken up.}(hjB&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMxhj%ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM|hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_timeout (C macro)c.wait_event_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hj&h]hwait_event_timeout}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMhj&hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhjhNhNubj9)}(h4``wait_event_timeout (wq_head, condition, timeout)``h]j?)}(hj&h]h0wait_event_timeout (wq_head, condition, timeout)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h7sleep until a condition gets true or a timeout elapses h]j9)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubah}(h]h ]h"]h$]h&]uh1jThj'hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](j9)}(h**Parameters**h]jz)}(hj!'h]h Parameters}(hj#'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj@'h]hwq_head}(hjB'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj:'ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjU'hMhjV'ubah}(h]h ]h"]h$]h&]uh1jhj:'ubeh}(h]h ]h"]h$]h&]uh1jhjU'hMhj7'ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjy'h]h condition}(hj{'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjw'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjs'ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhjs'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj7'ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hj'h]htimeout}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj7'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj(hhhNhNubjz)}(h **condition**h]h condition}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh evaluates to true. The }(hj(hhhNhNubjz)}(h **condition**h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh$ is checked each time the waitqueue }(hj(hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj/(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh is woken up.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj9)}(h **Return**h]jz)}(hjY(h]hReturn}(hj[(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW(ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubj9)}(hX 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](h 0 if the }(hjo(hhhNhNubjz)}(h **condition**h]h condition}(hjw(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh evaluated to }(hjo(hhhNhNubj?)}(h ``false``h]hfalse}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo(ubh after the }(hjo(hhhNhNubjz)}(h **timeout**h]htimeout}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh elapsed, 1 if the }(hjo(hhhNhNubjz)}(h **condition**h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh evaluated to }hjo(sbj?)}(h``true``h]htrue}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo(ubh after the }hjo(sbjz)}(h **timeout**h]htimeout}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hjo(hhhNhNubjz)}(h **condition**h]h condition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh evaluated to }(hjo(hhhNhNubj?)}(h``true``h]htrue}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo(ubh before the }(hjo(hhhNhNubjz)}(h **timeout**h]htimeout}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo(ubh elapsed.}(hjo(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_cmd (C macro)c.wait_event_cmdhNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hj:)h]hwait_event_cmd}(hjD)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<)hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj8)hhhjW)hMubah}(h]j3)ah ](jjeh"]h$]h&]jj)jhuh1hhjW)hMhj5)hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj5)hhhjW)hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jp)j4jp)j5j6j7uh1hhhhjhNhNubj9)}(h3``wait_event_cmd (wq_head, condition, cmd1, cmd2)``h]j?)}(hjv)h]h/wait_event_cmd (wq_head, condition, cmd1, cmd2)}(hjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjt)ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jThj)hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``cmd1`` the command will be executed before sleep ``cmd2`` the command will be executed after sleep **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition.h](j9)}(h**Parameters**h]jz)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj)h]hwq_head}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj*h]h condition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj)ubj)}(h3``cmd1`` the command will be executed before sleep h](j)}(h``cmd1``h]j?)}(hj<*h]hcmd1}(hj>*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6*ubj)}(hhh]j9)}(h)the command will be executed before sleeph]h)the command will be executed before sleep}(hjU*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQ*hMhjR*ubah}(h]h ]h"]h$]h&]uh1jhj6*ubeh}(h]h ]h"]h$]h&]uh1jhjQ*hMhj)ubj)}(h2``cmd2`` the command will be executed after sleep h](j)}(h``cmd2``h]j?)}(hju*h]hcmd2}(hjw*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjs*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjo*ubj)}(hhh]j9)}(h(the command will be executed after sleeph]h(the command will be executed after sleep}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjo*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj*hhhNhNubjz)}(h **condition**h]h condition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh evaluates to true. The }(hj*hhhNhNubjz)}(h **condition**h]h condition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh$ is checked each time the waitqueue }(hj*hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh is woken up.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"wait_event_interruptible (C macro)c.wait_event_interruptiblehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hj4+h]hwait_event_interruptible}(hj>+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6+hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj2+hhhjQ+hMubah}(h]j-+ah ](jjeh"]h$]h&]jj)jhuh1hhjQ+hMhj/+hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj/+hhhjQ+hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj+j4jj+j5j6j7uh1hhhhjhNhNubj9)}(h1``wait_event_interruptible (wq_head, condition)``h]j?)}(hjp+h]h-wait_event_interruptible (wq_head, condition)}(hjr+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjn+ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jThj+hMhjhhubjp)}(hX#**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj+h]hwq_head}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj+ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj+h]h condition}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(h**Description**h]jz)}(hj8,h]h Description}(hj:,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6,ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjN,hhhNhNubjz)}(h **condition**h]h condition}(hjV,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN,ubh0 evaluates to true or a signal is received. The }(hjN,hhhNhNubjz)}(h **condition**h]h condition}(hjh,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN,ubh$ is checked each time the waitqueue }(hjN,hhhNhNubjz)}(h **wq_head**h]hwq_head}(hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN,ubh is woken up.}(hjN,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj,hhhNhNubjz)}(h **condition**h]h condition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh evaluated to true.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*wait_event_interruptible_timeout (C macro)"c.wait_event_interruptible_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(hj,h]h wait_event_interruptible_timeout}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj,hhhj,hMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhj,hMhj,hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,hhhj,hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhjhNhNubj9)}(hB``wait_event_interruptible_timeout (wq_head, condition, timeout)``h]j?)}(hj-h]h>wait_event_interruptible_timeout (wq_head, condition, timeout)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h7sleep until a condition gets true or a timeout elapses h]j9)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj/-ubah}(h]h ]h"]h$]h&]uh1jThjA-hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed, or -``ERESTARTSYS`` if it was interrupted by a signal.h](j9)}(h**Parameters**h]jz)}(hjN-h]h Parameters}(hjP-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL-ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjH-ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjm-h]hwq_head}(hjo-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjk-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjg-ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjg-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjd-ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj-h]h condition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjd-ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hj-h]htimeout}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-ubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjd-ubeh}(h]h ]h"]h$]h&]uh1jhjH-ubj9)}(h**Description**h]jz)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hjH-ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj0.hhhNhNubjz)}(h **condition**h]h condition}(hj8.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0.ubh0 evaluates to true or a signal is received. The }(hj0.hhhNhNubjz)}(h **condition**h]h condition}(hjJ.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0.ubh$ is checked each time the waitqueue }(hj0.hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj\.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0.ubh is woken up.}(hj0.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjH-ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hju.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hjH-ubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjH-ubj9)}(hX=0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed, or -``ERESTARTSYS`` if it was interrupted by a signal.h](h 0 if the }(hj.hhhNhNubjz)}(h **condition**h]h condition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh evaluated to }(hj.hhhNhNubj?)}(h ``false``h]hfalse}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubh after the }(hj.hhhNhNubjz)}(h **timeout**h]htimeout}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh elapsed, 1 if the }(hj.hhhNhNubjz)}(h **condition**h]h condition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh evaluated to }hj.sbj?)}(h``true``h]htrue}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubh after the }hj.sbjz)}(h **timeout**h]htimeout}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh4 elapsed, the remaining jiffies (at least 1) if the }(hj.hhhNhNubjz)}(h **condition**h]h condition}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh evaluated to }(hj.hhhNhNubj?)}(h``true``h]htrue}(hj"/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubh before the }(hj.hhhNhNubjz)}(h **timeout**h]htimeout}(hj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh elapsed, or -}(hj.hhhNhNubj?)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hjF/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubh# if it was interrupted by a signal.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjH-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_hrtimeout (C macro)c.wait_event_hrtimeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hjy/h]hwait_event_hrtimeout}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{/hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;ubah}(h]h ]h"]h$]h&]jj juh1hjjhjw/hhhj/hM;ubah}(h]jr/ah ](jjeh"]h$]h&]jj)jhuh1hhj/hM;hjt/hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjt/hhhj/hM;ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhjhNhNubj9)}(h6``wait_event_hrtimeout (wq_head, condition, timeout)``h]j?)}(hj/h]h2wait_event_hrtimeout (wq_head, condition, timeout)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM=hjhhubjU)}(h7sleep until a condition gets true or a timeout elapses h]j9)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hj/ubah}(h]h ]h"]h$]h&]uh1jThj/hM;hjhhubjp)}(hX/**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, as a ktime_t **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. The function returns 0 if **condition** became true, or -ETIME if the timeout elapsed.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hj/ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj 0h]hwq_head}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM<hj0ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj"0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hM<hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM<hj0ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjB0h]h condition}(hjD0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM=hj<0ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj[0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjW0hM=hjX0ubah}(h]h ]h"]h$]h&]uh1jhj<0ubeh}(h]h ]h"]h$]h&]uh1jhjW0hM=hj0ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]j?)}(hj{0h]htimeout}(hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjy0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hju0ubj)}(hhh]j9)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hM>hj0ubah}(h]h ]h"]h$]h&]uh1jhju0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM>hj0ubeh}(h]h ]h"]h$]h&]uh1jhj/ubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM@hj/ubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj0hhhNhNubjz)}(h **condition**h]h condition}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh0 evaluates to true or a signal is received. The }(hj0hhhNhNubjz)}(h **condition**h]h condition}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh$ is checked each time the waitqueue }(hj0hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh is woken up.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hj/ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMChj/ubj9)}(hVThe function returns 0 if **condition** became true, or -ETIME if the timeout elapsed.h](hThe function returns 0 if }(hj 1hhhNhNubjz)}(h **condition**h]h condition}(hj(1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 1ubh/ became true, or -ETIME if the timeout elapsed.}(hj 1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMFhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,wait_event_interruptible_hrtimeout (C macro)$c.wait_event_interruptible_hrtimeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(hj[1h]h"wait_event_interruptible_hrtimeout}(hje1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]1hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUubah}(h]h ]h"]h$]h&]jj juh1hjjhjY1hhhjx1hMUubah}(h]jT1ah ](jjeh"]h$]h&]jj)jhuh1hhjx1hMUhjV1hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjV1hhhjx1hMUubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhjhNhNubj9)}(h?``wait_event_interruptible_hrtimeout (wq, condition, timeout)``h]j?)}(hj1h]h;wait_event_interruptible_hrtimeout (wq, condition, timeout)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjhhubjU)}(h7sleep until a condition gets true or a timeout elapses h]j9)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj1ubah}(h]h ]h"]h$]h&]uh1jThj1hMUhjhhubjp)}(hXS**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, as a ktime_t **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. The function returns 0 if **condition** became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.h](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj1ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j?)}(hj1h]hwq}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj1ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMVhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMVhj1ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj$2h]h condition}(hj&2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj2ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj=2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj92hMWhj:2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj92hMWhj1ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]j?)}(hj]2h]htimeout}(hj_2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhjW2ubj)}(hhh]j9)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hjv2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjr2hMXhjs2ubah}(h]h ]h"]h$]h&]uh1jhjW2ubeh}(h]h ]h"]h$]h&]uh1jhjr2hMXhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhj1ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj2hhhNhNubjz)}(h **condition**h]h condition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh0 evaluates to true or a signal is received. The }(hj2hhhNhNubjz)}(h **condition**h]h condition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh$ is checked each time the waitqueue }(hj2hhhNhNubjz)}(h**wq**h]hwq}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh is woken up.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj1ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM]hj1ubj9)}(hThe function returns 0 if **condition** became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.h](hThe function returns 0 if }(hj3hhhNhNubjz)}(h **condition**h]h condition}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh_ became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM`hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_idle (C macro)c.wait_event_idlehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hj=3h]hwait_event_idle}(hjG3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?3hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj;3hhhjZ3hMubah}(h]j63ah ](jjeh"]h$]h&]jj)jhuh1hhjZ3hMhj83hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj83hhhjZ3hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3js3j4js3j5j6j7uh1hhhhjhNhNubj9)}(h(``wait_event_idle (wq_head, condition)``h]j?)}(hjy3h]h$wait_event_idle (wq_head, condition)}(hj{3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjw3ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h9wait for a condition without contributing to system load h]j9)}(h8wait for a condition without contributing to system loadh]h8wait for a condition without contributing to system load}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubah}(h]h ]h"]h$]h&]uh1jThj3hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition.h](j9)}(h**Parameters**h]jz)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj3h]hwq_head}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj4h]h condition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hjA4h]h Description}(hjC4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?4ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj9)}(hThe process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h2The process is put to sleep (TASK_IDLE) until the }(hjW4hhhNhNubjz)}(h **condition**h]h condition}(hj_4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW4ubh evaluates to true. The }(hjW4hhhNhNubjz)}(h **condition**h]h condition}(hjq4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW4ubh$ is checked each time the waitqueue }(hjW4hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW4ubh is woken up.}(hjW4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#wait_event_idle_exclusive (C macro)c.wait_event_idle_exclusivehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hj4h]hwait_event_idle_exclusive}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj4hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhj4hMhj4hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhjhNhNubj9)}(h2``wait_event_idle_exclusive (wq_head, condition)``h]j?)}(hj5h]h.wait_event_idle_exclusive (wq_head, condition)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h6wait for a condition with contributing to system load h]j9)}(h5wait for a condition with contributing to system loadh]h5wait for a condition with contributing to system load}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jThj)5hMhjhhubjp)}(hXH**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered. wake_up() has to be called after changing any variable that could change the result of the wait condition.h](j9)}(h**Parameters**h]jz)}(hj65h]h Parameters}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj45ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj05ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjU5h]hwq_head}(hjW5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjS5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjO5ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjn5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjj5hMhjk5ubah}(h]h ]h"]h$]h&]uh1jhjO5ubeh}(h]h ]h"]h$]h&]uh1jhjj5hMhjL5ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj5h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj5ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjL5ubeh}(h]h ]h"]h$]h&]uh1jhj05ubj9)}(h**Description**h]jz)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj05ubj9)}(hThe process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h2The process is put to sleep (TASK_IDLE) until the }(hj5hhhNhNubjz)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh evaluates to true. The }(hj5hhhNhNubjz)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh$ is checked each time the waitqueue }(hj5hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh is woken up.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj05ubj9)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.}(hj$6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj05ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj36hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj05ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!wait_event_idle_timeout (C macro)c.wait_event_idle_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hj\6h]hwait_event_idle_timeout}(hjf6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb6ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^6hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjZ6hhhjy6hMubah}(h]jU6ah ](jjeh"]h$]h&]jj)jhuh1hhjy6hMhjW6hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjW6hhhjy6hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhjhNhNubj9)}(h9``wait_event_idle_timeout (wq_head, condition, timeout)``h]j?)}(hj6h]h5wait_event_idle_timeout (wq_head, condition, timeout)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(hGsleep without load until a condition becomes true or a timeout elapses h]j9)}(hFsleep without load until a condition becomes true or a timeout elapsesh]hFsleep without load until a condition becomes true or a timeout elapses}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jThj6hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj6h]hwq_head}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj6ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj%7h]h condition}(hj'7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#7ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj7ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj>7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:7hMhj;7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj:7hMhj6ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hj^7h]htimeout}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\7ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjX7ubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjw7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjs7hMhjt7ubah}(h]h ]h"]h$]h&]uh1jhjX7ubeh}(h]h ]h"]h$]h&]uh1jhjs7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubj9)}(h**Description**h]jz)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj9)}(hThe process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h2The process is put to sleep (TASK_IDLE) until the }(hj7hhhNhNubjz)}(h **condition**h]h condition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh evaluates to true. The }(hj7hhhNhNubjz)}(h **condition**h]h condition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh$ is checked each time the waitqueue }(hj7hhhNhNubjz)}(h **wq_head**h]hwq_head}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh is woken up.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj9)}(h **Return**h]jz)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj9)}(hX 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](h 0 if the }(hj8hhhNhNubjz)}(h **condition**h]h condition}(hj#8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh evaluated to }(hj8hhhNhNubj?)}(h ``false``h]hfalse}(hj58hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh after the }(hj8hhhNhNubjz)}(h **timeout**h]htimeout}(hjG8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh elapsed, 1 if the }(hj8hhhNhNubjz)}(h **condition**h]h condition}(hjY8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh evaluated to }hj8sbj?)}(h``true``h]htrue}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh after the }hj8sbjz)}(h **timeout**h]htimeout}(hj}8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hj8hhhNhNubjz)}(h **condition**h]h condition}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh evaluated to }(hj8hhhNhNubj?)}(h``true``h]htrue}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh before the }(hj8hhhNhNubjz)}(h **timeout**h]htimeout}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh elapsed.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+wait_event_idle_exclusive_timeout (C macro)#c.wait_event_idle_exclusive_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(hj8h]h!wait_event_idle_exclusive_timeout}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhj9hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhj9hMhj8hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj8hhhj9hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhjhNhNubj9)}(hC``wait_event_idle_exclusive_timeout (wq_head, condition, timeout)``h]j?)}(hj"9h]h?wait_event_idle_exclusive_timeout (wq_head, condition, timeout)}(hj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 9ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(hGsleep without load until a condition becomes true or a timeout elapses h]j9)}(hFsleep without load until a condition becomes true or a timeout elapsesh]hFsleep without load until a condition becomes true or a timeout elapses}(hj<9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj89ubah}(h]h ]h"]h$]h&]uh1jThjJ9hMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered. wake_up() has to be called after changing any variable that could change the result of the wait condition. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](j9)}(h**Parameters**h]jz)}(hjW9h]h Parameters}(hjY9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU9ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjv9h]hwq_head}(hjx9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjt9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjp9ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjp9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjm9ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj9h]h condition}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj9ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjm9ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hj9h]htimeout}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj9ubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjm9ubeh}(h]h ]h"]h$]h&]uh1jhjQ9ubj9)}(h**Description**h]jz)}(hj#:h]h Description}(hj%:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!:ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj9)}(hThe process is put to sleep (TASK_IDLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h2The process is put to sleep (TASK_IDLE) until the }(hj9:hhhNhNubjz)}(h **condition**h]h condition}(hjA:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9:ubh evaluates to true. The }(hj9:hhhNhNubjz)}(h **condition**h]h condition}(hjS:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9:ubh$ is checked each time the waitqueue }(hj9:hhhNhNubjz)}(h **wq_head**h]hwq_head}(hje:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9:ubh is woken up.}(hj9:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj9)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus if other processes wait on the same list, when this process is woken further processes are not considered.}(hj~:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj9)}(h **Return**h]jz)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubj9)}(hX 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, or the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed.h](h 0 if the }(hj:hhhNhNubjz)}(h **condition**h]h condition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh evaluated to }(hj:hhhNhNubj?)}(h ``false``h]hfalse}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubh after the }(hj:hhhNhNubjz)}(h **timeout**h]htimeout}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh elapsed, 1 if the }(hj:hhhNhNubjz)}(h **condition**h]h condition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh evaluated to }hj:sbj?)}(h``true``h]htrue}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubh after the }hj:sbjz)}(h **timeout**h]htimeout}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hj:hhhNhNubjz)}(h **condition**h]h condition}(hj(;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh evaluated to }(hj:hhhNhNubj?)}(h``true``h]htrue}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubh before the }(hj:hhhNhNubjz)}(h **timeout**h]htimeout}(hjL;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh elapsed.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQ9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)wait_event_interruptible_locked (C macro)!c.wait_event_interruptible_lockedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]h)}(hj;h]hwait_event_interruptible_locked}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhj};hhhj;hMubah}(h]jx;ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhjz;hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjz;hhhj;hMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhjhNhNubj9)}(h3``wait_event_interruptible_locked (wq, condition)``h]j?)}(hj;h]h/wait_event_interruptible_locked (wq, condition)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj;ubah}(h]h ]h"]h$]h&]uh1jThj;hMhjhhubjp)}(hXg**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM!hj;ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j?)}(hj<h]hwq}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj <ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj <ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj(<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$<hMhj%<ubah}(h]h ]h"]h$]h&]uh1jhj <ubeh}(h]h ]h"]h$]h&]uh1jhj$<hMhj<ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjH<h]h condition}(hjJ<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjF<ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjB<ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]<hMhj^<ubah}(h]h ]h"]h$]h&]uh1jhjB<ubeh}(h]h ]h"]h$]h&]uh1jhj]<hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM!hj;ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj<hhhNhNubjz)}(h **condition**h]h condition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh0 evaluates to true or a signal is received. The }(hj<hhhNhNubjz)}(h **condition**h]h condition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh$ is checked each time the waitqueue }(hj<hhhNhNubjz)}(h**wq**h]hwq}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh is woken up.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hj;ubj9)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hj<hhhNhNubjz)}(h **condition**h]h condition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubhO testing is done while lock is held and when this macro exits the lock is held.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM$hj;ubj9)}(hThe lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro.h]hThe lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM(hj;ubj9)}(hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.h]hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM,hj;ubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj=hhhNhNubjz)}(h **condition**h]h condition}(hj%=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh evaluated to true.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-wait_event_interruptible_locked_irq (C macro)%c.wait_event_interruptible_locked_irqhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]h)}(hjX=h]h#wait_event_interruptible_locked_irq}(hjb=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZ=hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8ubah}(h]h ]h"]h$]h&]jj juh1hjjhjV=hhhju=hM8ubah}(h]jQ=ah ](jjeh"]h$]h&]jj)jhuh1hhju=hM8hjS=hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjS=hhhju=hM8ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j=j4j=j5j6j7uh1hhhhjhNhNubj9)}(h7``wait_event_interruptible_locked_irq (wq, condition)``h]j?)}(hj=h]h3wait_event_interruptible_locked_irq (wq, condition)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM:hjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hj=ubah}(h]h ]h"]h$]h&]uh1jThj=hM8hjhhubjp)}(hXo**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM<hj=ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j?)}(hj=h]hwq}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM9hj=ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM9hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM9hj=ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj!>h]h condition}(hj#>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM:hj>ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj:>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6>hM:hj7>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj6>hM:hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubj9)}(h**Description**h]jz)}(hj\>h]h Description}(hj^>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ>ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM<hj=ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjr>hhhNhNubjz)}(h **condition**h]h condition}(hjz>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr>ubh0 evaluates to true or a signal is received. The }(hjr>hhhNhNubjz)}(h **condition**h]h condition}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr>ubh$ is checked each time the waitqueue }(hjr>hhhNhNubjz)}(h**wq**h]hwq}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr>ubh is woken up.}(hjr>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hj=ubj9)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hj>hhhNhNubjz)}(h **condition**h]h condition}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubhO testing is done while lock is held and when this macro exits the lock is held.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hj=ubj9)}(hThe lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro.h]hThe lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMChj=ubj9)}(hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.h]hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMGhj=ubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj>hhhNhNubjz)}(h **condition**h]h condition}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh evaluated to true.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMJhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3wait_event_interruptible_exclusive_locked (C macro)+c.wait_event_interruptible_exclusive_lockedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(hj1?h]h)wait_event_interruptible_exclusive_locked}(hj;?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3?hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMSubah}(h]h ]h"]h$]h&]jj juh1hjjhj/?hhhjN?hMSubah}(h]j*?ah ](jjeh"]h$]h&]jj)jhuh1hhjN?hMShj,?hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,?hhhjN?hMSubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jg?j4jg?j5j6j7uh1hhhhjhNhNubj9)}(h=``wait_event_interruptible_exclusive_locked (wq, condition)``h]j?)}(hjm?h]h9wait_event_interruptible_exclusive_locked (wq, condition)}(hjo?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjk?ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjhhubjU)}(h.sleep exclusively until a condition gets true h]j9)}(h-sleep exclusively until a condition gets trueh]h-sleep exclusively until a condition gets true}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMShj?ubah}(h]h ]h"]h$]h&]uh1jThj?hMShjhhubjp)}(hX"**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro. The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj?ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j?)}(hj?h]hwq}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThj?ubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMThj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMThj?ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj?h]h condition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhj?ubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMUhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hMUhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hj5@h]h Description}(hj7@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3@ubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj?ubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjK@hhhNhNubjz)}(h **condition**h]h condition}(hjS@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK@ubh0 evaluates to true or a signal is received. The }(hjK@hhhNhNubjz)}(h **condition**h]h condition}(hje@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK@ubh$ is checked each time the waitqueue }(hjK@hhhNhNubjz)}(h**wq**h]hwq}(hjw@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK@ubh is woken up.}(hjK@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj?ubj9)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hj@hhhNhNubjz)}(h **condition**h]h condition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubhO testing is done while lock is held and when this macro exits the lock is held.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhj?ubj9)}(hThe lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro.h]hThe lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM^hj?ubj9)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhj?ubj9)}(hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.h]hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhj?ubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj@hhhNhNubjz)}(h **condition**h]h condition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh evaluated to true.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMihj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ7wait_event_interruptible_exclusive_locked_irq (C macro)/c.wait_event_interruptible_exclusive_locked_irqhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-wait_event_interruptible_exclusive_locked_irqh]h)}(h-wait_event_interruptible_exclusive_locked_irqh]h)}(h-wait_event_interruptible_exclusive_locked_irqh]h)}(hjAh]h-wait_event_interruptible_exclusive_locked_irq}(hj#AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMrubah}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhj6AhMrubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1hhj6AhMrhjAhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjAhhhj6AhMrubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jOAj4jOAj5j6j7uh1hhhhjhNhNubj9)}(hA``wait_event_interruptible_exclusive_locked_irq (wq, condition)``h]j?)}(hjUAh]h=wait_event_interruptible_exclusive_locked_irq (wq, condition)}(hjWAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSAubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjoAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMrhjkAubah}(h]h ]h"]h$]h&]uh1jThj}AhMrhjhhubjp)}(hX***Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro. The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjAubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]j?)}(hjAh]hwq}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshjAubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMshjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMshjAubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjAh]h condition}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjAubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMthjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMthjAubeh}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjAubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hj3BhhhNhNubjz)}(h **condition**h]h condition}(hj;BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Bubh0 evaluates to true or a signal is received. The }(hj3BhhhNhNubjz)}(h **condition**h]h condition}(hjMBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Bubh$ is checked each time the waitqueue }(hj3BhhhNhNubjz)}(h**wq**h]hwq}(hj_BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Bubh is woken up.}(hj3BhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuhjAubj9)}(hIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held.h](hYIt must be called with wq.lock being held. This spinlock is unlocked while sleeping but }(hjxBhhhNhNubjz)}(h **condition**h]h condition}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxBubhO testing is done while lock is held and when this macro exits the lock is held.}(hjxBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhjAubj9)}(hThe lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro.h]hThe lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM}hjAubj9)}(hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.h]hThe process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj9)}(hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.h]hqwake_up_locked() has to be called after changing any variable that could change the result of the wait condition.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hjBhhhNhNubjz)}(h **condition**h]h condition}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh evaluated to true.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_killable (C macro)c.wait_event_killablehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hjCh]hwait_event_killable}(hj ChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjChMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhjChMhjBhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjBhhhjChMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j7Cj4j7Cj5j6j7uh1hhhhjhNhNubj9)}(h,``wait_event_killable (wq_head, condition)``h]j?)}(hj=Ch]h(wait_event_killable (wq_head, condition)}(hj?ChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;Cubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjWChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjSCubah}(h]h ]h"]h$]h&]uh1jThjeChMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_KILLABLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hjrCh]h Parameters}(hjtChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpCubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjlCubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjCh]hwq_head}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjCubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjCh]h condition}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjCubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubeh}(h]h ]h"]h$]h&]uh1jhjlCubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjlCubj9)}(hThe process is put to sleep (TASK_KILLABLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h6The process is put to sleep (TASK_KILLABLE) until the }(hjDhhhNhNubjz)}(h **condition**h]h condition}(hj#DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh0 evaluates to true or a signal is received. The }(hjDhhhNhNubjz)}(h **condition**h]h condition}(hj5DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh$ is checked each time the waitqueue }(hjDhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjGDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh is woken up.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjlCubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj`DhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjlCubj9)}(hqThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hQThe function will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hjoDhhhNhNubjz)}(h **condition**h]h condition}(hjwDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoDubh evaluated to true.}(hjoDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjlCubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_state (C macro)c.wait_event_statehNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hjDh]hwait_event_state}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjDhMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhjDhMhjDhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhjhNhNubj9)}(h0``wait_event_state (wq_head, condition, state)``h]j?)}(hjDh]h,wait_event_state (wq_head, condition, state)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h"sleep until a condition gets true h]j9)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubah}(h]h ]h"]h$]h&]uh1jThjEhMhjhhubjp)}(hXr**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``state`` state to sleep in **Description** The process is put to sleep (**state**) until the **condition** evaluates to true or a signal is received (when allowed by **state**). The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal (when allowed by **state**) and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hj:Eh]hwq_head}(hjhj8Eubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4Eubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjSEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOEhMhjPEubah}(h]h ]h"]h$]h&]uh1jhj4Eubeh}(h]h ]h"]h$]h&]uh1jhjOEhMhj1Eubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjsEh]h condition}(hjuEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjmEubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjmEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj1Eubj)}(h``state`` state to sleep in h](j)}(h ``state``h]j?)}(hjEh]hstate}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj)}(hhh]j9)}(hstate to sleep inh]hstate to sleep in}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj1Eubeh}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj9)}(hThe process is put to sleep (**state**) until the **condition** evaluates to true or a signal is received (when allowed by **state**). The **condition** is checked each time the waitqueue **wq_head** is woken up.h](hThe process is put to sleep (}(hjEhhhNhNubjz)}(h **state**h]hstate}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh ) until the }(hjEhhhNhNubjz)}(h **condition**h]h condition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh< evaluates to true or a signal is received (when allowed by }(hjEhhhNhNubjz)}(h **state**h]hstate}(hj)FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh). The }(hjEhhhNhNubjz)}(h **condition**h]h condition}(hj;FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh$ is checked each time the waitqueue }(hjEhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjMFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh is woken up.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj9)}(hThe function will return -ERESTARTSYS if it was interrupted by a signal (when allowed by **state**) and 0 if **condition** evaluated to true.h](hYThe function will return -ERESTARTSYS if it was interrupted by a signal (when allowed by }(hjuFhhhNhNubjz)}(h **state**h]hstate}(hj}FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuFubh ) and 0 if }(hjuFhhhNhNubjz)}(h **condition**h]h condition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuFubh evaluated to true.}(hjuFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%wait_event_killable_timeout (C macro)c.wait_event_killable_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hjFh]hwait_event_killable_timeout}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjFhMubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjFhMhjFhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjFhhhjFhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhjhNhNubj9)}(h=``wait_event_killable_timeout (wq_head, condition, timeout)``h]j?)}(hjFh]h9wait_event_killable_timeout (wq_head, condition, timeout)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(h7sleep until a condition gets true or a timeout elapses h]j9)}(h6sleep until a condition gets true or a timeout elapsesh]h6sleep until a condition gets true or a timeout elapses}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjGubah}(h]h ]h"]h$]h&]uh1jThj&GhMhjhhubjp)}(hXO**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_KILLABLE) until the **condition** evaluates to true or a kill signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. Only kill signals interrupt this process. **Return** 0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed, or -``ERESTARTSYS`` if it was interrupted by a kill signal.h](j9)}(h**Parameters**h]jz)}(hj3Gh]h Parameters}(hj5GhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1Gubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjRGh]hwq_head}(hjTGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPGubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjLGubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjkGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjgGhMhjhGubah}(h]h ]h"]h$]h&]uh1jhjLGubeh}(h]h ]h"]h$]h&]uh1jhjgGhMhjIGubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjGh]h condition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjGubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjIGubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hjGh]htimeout}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjGubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjIGubeh}(h]h ]h"]h$]h&]uh1jhj-Gubj9)}(h**Description**h]jz)}(hjGh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj9)}(hThe process is put to sleep (TASK_KILLABLE) until the **condition** evaluates to true or a kill signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h6The process is put to sleep (TASK_KILLABLE) until the }(hjHhhhNhNubjz)}(h **condition**h]h condition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh5 evaluates to true or a kill signal is received. The }(hjHhhhNhNubjz)}(h **condition**h]h condition}(hj/HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh$ is checked each time the waitqueue }(hjHhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjAHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh is woken up.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjZHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj9)}(h)Only kill signals interrupt this process.h]h)Only kill signals interrupt this process.}(hjiHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj9)}(h **Return**h]jz)}(hjzHh]hReturn}(hj|HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxHubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubj9)}(hXB0 if the **condition** evaluated to ``false`` after the **timeout** elapsed, 1 if the **condition** evaluated to ``true`` after the **timeout** elapsed, the remaining jiffies (at least 1) if the **condition** evaluated to ``true`` before the **timeout** elapsed, or -``ERESTARTSYS`` if it was interrupted by a kill signal.h](h 0 if the }(hjHhhhNhNubjz)}(h **condition**h]h condition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh evaluated to }(hjHhhhNhNubj?)}(h ``false``h]hfalse}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubh after the }(hjHhhhNhNubjz)}(h **timeout**h]htimeout}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh elapsed, 1 if the }(hjHhhhNhNubjz)}(h **condition**h]h condition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh evaluated to }hjHsbj?)}(h``true``h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubh after the }hjHsbjz)}(h **timeout**h]htimeout}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh4 elapsed, the remaining jiffies (at least 1) if the }(hjHhhhNhNubjz)}(h **condition**h]h condition}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh evaluated to }(hjHhhhNhNubj?)}(h``true``h]htrue}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubh before the }(hjHhhhNhNubjz)}(h **timeout**h]htimeout}(hj(IhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh elapsed, or -}(hjHhhhNhNubj?)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hj:IhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubh( if it was interrupted by a kill signal.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj-Gubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!wait_event_lock_irq_cmd (C macro)c.wait_event_lock_irq_cmdhNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hjmIh]hwait_event_lock_irq_cmd}(hjwIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjoIhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjkIhhhjIhMubah}(h]jfIah ](jjeh"]h$]h&]jj)jhuh1hhjIhMhjhIhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhIhhhjIhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhjhNhNubj9)}(h;``wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)``h]j?)}(hjIh]h7wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]j9)}(h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.h]h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubah}(h]h ]h"]h$]h&]uh1jThjIhMhjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. ``cmd`` a command which is invoked outside the critical section before sleep **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjIh]hwq_head}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj6Jh]h condition}(hj8JhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4Jubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj0Jubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjOJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKJhMhjLJubah}(h]h ]h"]h$]h&]uh1jhj0Jubeh}(h]h ]h"]h$]h&]uh1jhjKJhMhjIubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]j?)}(hjoJh]hlock}(hjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjiJubj)}(hhh]j9)}(h`a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards.h]h`a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhjiJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]j?)}(hjJh]hcmd}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubj)}(hhh]j9)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hjJhhhNhNubjz)}(h **condition**h]h condition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh evaluates to true. The }(hjJhhhNhNubjz)}(h **condition**h]h condition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh$ is checked each time the waitqueue }(hjJhhhNhNubjz)}(h **wq_head**h]hwq_head}(hj'KhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh is woken up.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj@KhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj9)}(hThis is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards.h]hThis is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards.}(hjOKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM"hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_event_lock_irq (C macro)c.wait_event_lock_irqhNtauh1hhjhhhNhNubh)}(hhh](h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]h)}(hjxKh]hwait_event_lock_irq}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~Kubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzKhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/ubah}(h]h ]h"]h$]h&]jj juh1hjjhjvKhhhjKhM/ubah}(h]jqKah ](jjeh"]h$]h&]jj)jhuh1hhjKhM/hjsKhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjsKhhhjKhM/ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhjhNhNubj9)}(h2``wait_event_lock_irq (wq_head, condition, lock)``h]j?)}(hjKh]h.wait_event_lock_irq (wq_head, condition, lock)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM1hjhhubjU)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]j9)}(h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.h]h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/hjKubah}(h]h ]h"]h$]h&]uh1jThjKhM/hjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. **Description** The process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hjKubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjLh]hwq_head}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hjLubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj!LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhM3hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM3hjKubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjALh]h condition}(hjCLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?Lubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM4hj;Lubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjZLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVLhM4hjWLubah}(h]h ]h"]h$]h&]uh1jhj;Lubeh}(h]h ]h"]h$]h&]uh1jhjVLhM4hjKubj)}(hb``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. h](j)}(h``lock``h]j?)}(hjzLh]hlock}(hj|LhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM6hjtLubj)}(hhh]j9)}(hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.h]hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM5hjLubah}(h]h ]h"]h$]h&]uh1jhjtLubeh}(h]h ]h"]h$]h&]uh1jhjLhM6hjKubeh}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hjKubj9)}(hThe process is put to sleep (TASK_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hjLhhhNhNubjz)}(h **condition**h]h condition}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh evaluates to true. The }(hjLhhhNhNubjz)}(h **condition**h]h condition}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh$ is checked each time the waitqueue }(hjLhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh is woken up.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM7hjKubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hjKubj9)}(h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.h]h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/wait_event_interruptible_lock_irq_cmd (C macro)'c.wait_event_interruptible_lock_irq_cmdhNtauh1hhjhhhNhNubh)}(hhh](h)}(h%wait_event_interruptible_lock_irq_cmdh]h)}(h%wait_event_interruptible_lock_irq_cmdh]h)}(h%wait_event_interruptible_lock_irq_cmdh]h)}(hjIMh]h%wait_event_interruptible_lock_irq_cmd}(hjSMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOMubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKMhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRubah}(h]h ]h"]h$]h&]jj juh1hjjhjGMhhhjfMhMRubah}(h]jBMah ](jjeh"]h$]h&]jj)jhuh1hhjfMhMRhjDMhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjDMhhhjfMhMRubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jMj4jMj5j6j7uh1hhhhjhNhNubj9)}(hI``wait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)``h]j?)}(hjMh]hEwait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThjhhubjU)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]j9)}(h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.h]h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhjMubah}(h]h ]h"]h$]h&]uh1jThjMhMRhjhhubjp)}(hXu**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. ``cmd`` a command which is invoked outside the critical section before sleep **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards. The macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhjMubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjMh]hwq_head}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjMubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhMUhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMUhjMubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hjNh]h condition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj Nubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj+NhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'NhMVhj(Nubah}(h]h ]h"]h$]h&]uh1jhj Nubeh}(h]h ]h"]h$]h&]uh1jhj'NhMVhjMubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]j?)}(hjKNh]hlock}(hjMNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjINubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhjENubj)}(hhh]j9)}(h`a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards.h]h`a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards.}(hjdNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjaNubah}(h]h ]h"]h$]h&]uh1jhjENubeh}(h]h ]h"]h$]h&]uh1jhj`NhMXhjMubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]j?)}(hjNh]hcmd}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhjNubj)}(hhh]j9)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMZhjMubeh}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM\hjMubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjNhhhNhNubjz)}(h **condition**h]h condition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh0 evaluates to true or a signal is received. The }(hjNhhhNhNubjz)}(h **condition**h]h condition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh$ is checked each time the waitqueue }(hjNhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh is woken up.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hjMubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM_hjMubj9)}(hThis is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards.h]hThis is supposed to be called while holding the lock. The lock is dropped before invoking the cmd and going to sleep and is reacquired afterwards.}(hj+OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhjMubj9)}(hnThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hNThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj:OhhhNhNubjz)}(h **condition**h]h condition}(hjBOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Oubh evaluated to true.}(hj:OhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+wait_event_interruptible_lock_irq (C macro)#c.wait_event_interruptible_lock_irqhNtauh1hhjhhhNhNubh)}(hhh](h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(hjuOh]h!wait_event_interruptible_lock_irq}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{Oubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwOhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMtubah}(h]h ]h"]h$]h&]jj juh1hjjhjsOhhhjOhMtubah}(h]jnOah ](jjeh"]h$]h&]jj)jhuh1hhjOhMthjpOhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjpOhhhjOhMtubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jOj4jOj5j6j7uh1hhhhjhNhNubj9)}(h@``wait_event_interruptible_lock_irq (wq_head, condition, lock)``h]j?)}(hjOh]hhjOubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjhhubjU)}(hsleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken. h]j9)}(h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.h]h~sleep until a condition gets true. The condition is checked under the lock. This is expected to be called with the lock taken.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjOubah}(h]h ]h"]h$]h&]uh1jThjOhMthjhhubjp)}(hX**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards. The macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](j9)}(h**Parameters**h]jz)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMxhjOubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjPh]hwq_head}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMwhjOubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMwhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMwhjOubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj>Ph]h condition}(hj@PhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhjuPubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMzhjqPubj)}(hhh]j9)}(hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.h]hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhjPubah}(h]h ]h"]h$]h&]uh1jhjqPubeh}(h]h ]h"]h$]h&]uh1jhjPhMzhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM|hjOubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjPhhhNhNubjz)}(h **condition**h]h condition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh. evaluates to true or signal is received. The }(hjPhhhNhNubjz)}(h **condition**h]h condition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh$ is checked each time the waitqueue }(hjPhhhNhNubjz)}(h **wq_head**h]hwq_head}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh is woken up.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM{hjOubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj9)}(h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.h]h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubj9)}(hnThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](hNThe macro will return -ERESTARTSYS if it was interrupted by a signal and 0 if }(hj,QhhhNhNubjz)}(h **condition**h]h condition}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Qubh evaluated to true.}(hj,QhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ3wait_event_interruptible_lock_irq_timeout (C macro)+c.wait_event_interruptible_lock_irq_timeouthNtauh1hhjhhhNhNubh)}(hhh](h)}(h)wait_event_interruptible_lock_irq_timeouth]h)}(h)wait_event_interruptible_lock_irq_timeouth]h)}(h)wait_event_interruptible_lock_irq_timeouth]h)}(hjgQh]h)wait_event_interruptible_lock_irq_timeout}(hjqQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjiQhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jj juh1hjjhjeQhhhjQhMubah}(h]j`Qah ](jjeh"]h$]h&]jj)jhuh1hhjQhMhjbQhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjbQhhhjQhMubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhjhNhNubj9)}(hQ``wait_event_interruptible_lock_irq_timeout (wq_head, condition, lock, timeout)``h]j?)}(hjQh]hMwait_event_interruptible_lock_irq_timeout (wq_head, condition, lock, timeout)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjhhubjU)}(hsleep until a condition gets true or a timeout elapses. The condition is checked under the lock. This is expected to be called with the lock taken. h]j9)}(hsleep until a condition gets true or a timeout elapses. The condition is checked under the lock. This is expected to be called with the lock taken.h]hsleep until a condition gets true or a timeout elapses. The condition is checked under the lock. This is expected to be called with the lock taken.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubah}(h]h ]h"]h$]h&]uh1jThjQhMhjhhubjp)}(hX~**Parameters** ``wq_head`` the waitqueue to wait on ``condition`` a C expression for the event to wait for ``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. ``timeout`` timeout, in jiffies **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up. wake_up() has to be called after changing any variable that could change the result of the wait condition. This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards. The function returns 0 if the **timeout** elapsed, -ERESTARTSYS if it was interrupted by a signal, and the remaining jiffies otherwise if the condition evaluated to true before the timeout elapsed.h](j9)}(h**Parameters**h]jz)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]j?)}(hjQh]hwq_head}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj)}(hhh]j9)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj RhMhj Rubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj RhMhjQubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]j?)}(hj0Rh]h condition}(hj2RhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.Rubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj*Rubj)}(hhh]j9)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjIRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjERhMhjFRubah}(h]h ]h"]h$]h&]uh1jhj*Rubeh}(h]h ]h"]h$]h&]uh1jhjERhMhjQubj)}(hb``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. h](j)}(h``lock``h]j?)}(hjiRh]hlock}(hjkRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgRubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjcRubj)}(hhh]j9)}(hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.h]hXa locked spinlock_t, which will be released before schedule() and reacquired afterwards.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjRubah}(h]h ]h"]h$]h&]uh1jhjcRubeh}(h]h ]h"]h$]h&]uh1jhj~RhMhjQubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]j?)}(hjRh]htimeout}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjRubj)}(hhh]j9)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubj9)}(h**Description**h]jz)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj9)}(hThe process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or signal is received. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h;The process is put to sleep (TASK_INTERRUPTIBLE) until the }(hjRhhhNhNubjz)}(h **condition**h]h condition}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh. evaluates to true or signal is received. The }(hjRhhhNhNubjz)}(h **condition**h]h condition}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh$ is checked each time the waitqueue }(hjRhhhNhNubjz)}(h **wq_head**h]hwq_head}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh is woken up.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj9)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj9ShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj9)}(h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.h]h}This is supposed to be called while holding the lock. The lock is dropped before going to sleep and is reacquired afterwards.}(hjHShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubj9)}(hThe function returns 0 if the **timeout** elapsed, -ERESTARTSYS if it was interrupted by a signal, and the remaining jiffies otherwise if the condition evaluated to true before the timeout elapsed.h](hThe function returns 0 if the }(hjWShhhNhNubjz)}(h **timeout**h]htimeout}(hj_ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWSubh elapsed, -ERESTARTSYS if it was interrupted by a signal, and the remaining jiffies otherwise if the condition evaluated to true before the timeout elapsed.}(hjWShhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__wake_up (C function) c.__wake_uphNtauh1hhjhhhNhNubh)}(hhh](h)}(h_int __wake_up (struct wait_queue_head *wq_head, unsigned int mode, int nr_exclusive, void *key)h]h)}(h^int __wake_up(struct wait_queue_head *wq_head, unsigned int mode, int nr_exclusive, void *key)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhjShKubh)}(h __wake_uph]h)}(h __wake_uph]h __wake_up}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShKubj )}(hQ(struct wait_queue_head *wq_head, unsigned int mode, int nr_exclusive, void *key)h](j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hjShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjSubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jl)}j_jSsb c.__wake_upasbuh1hhjSubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubj)}(hjh]h*}(hj!ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hwq_headh]hwq_head}(hj.ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjGThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCTubj=)}(h h]h }(hjUThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCTubj)}(hinth]hint}(hjcThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCTubj=)}(h h]h }(hjqThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCTubh)}(hmodeh]hmode}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hint nr_exclusiveh](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubh)}(h nr_exclusiveh]h nr_exclusive}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(h void *keyh](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hkeyh]hkey}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubeh}(h]h ]h"]h$]h&]jj uh1jhjShhhjShKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShKubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjShKhjShhubj )}(hhh]j9)}(h'wake up threads blocked on a waitqueue.h]h'wake up threads blocked on a waitqueue.}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjUhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8Uj4j8Uj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue ``unsigned int mode`` which threads ``int nr_exclusive`` how many wake-one or wake-many threads to wake up ``void *key`` is directly passed to the wakeup function **Description** If this function wakes up a task, it executes a full memory barrier before accessing the task state. Returns the number of exclusive tasks that were awaken.h](j9)}(h**Parameters**h]jz)}(hjBUh]h Parameters}(hjDUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@Uubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjhj_Uubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj[Uubj)}(hhh]j9)}(h the waitqueueh]h the waitqueue}(hjzUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvUhKhjwUubah}(h]h ]h"]h$]h&]uh1jhj[Uubeh}(h]h ]h"]h$]h&]uh1jhjvUhKhjXUubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]j?)}(hjUh]hunsigned int mode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjUubj)}(hhh]j9)}(h which threadsh]h which threads}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjXUubj)}(hG``int nr_exclusive`` how many wake-one or wake-many threads to wake up h](j)}(h``int nr_exclusive``h]j?)}(hjUh]hint nr_exclusive}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjUubj)}(hhh]j9)}(h1how many wake-one or wake-many threads to wake uph]h1how many wake-one or wake-many threads to wake up}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjXUubj)}(h8``void *key`` is directly passed to the wakeup function h](j)}(h ``void *key``h]j?)}(hj Vh]h void *key}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Vubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjVubj)}(hhh]j9)}(h)is directly passed to the wakeup functionh]h)is directly passed to the wakeup function}(hj%VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!VhKhj"Vubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhj!VhKhjXUubeh}(h]h ]h"]h$]h&]uh1jhjhjXubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjXubj)}(hhh]j9)}(h the waitqueueh]h the waitqueue}(hj9XhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5XhKhj6Xubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj5XhKhjXubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]j?)}(hjYXh]hunsigned int mode}(hj[XhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWXubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjSXubj)}(hhh]j9)}(h which threadsh]h which threads}(hjrXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnXhKhjoXubah}(h]h ]h"]h$]h&]uh1jhjSXubeh}(h]h ]h"]h$]h&]uh1jhjnXhKhjXubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]j?)}(hjXh]h void *key}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjXubj)}(hhh]j9)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhKhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjXubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj9)}(hX The sync wakeup differs that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs.h]hXThe sync wakeup differs that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are ‘synchronized’ with each other. This can prevent needless bouncing between CPUs.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj9)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj9)}(hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.h]hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&__wake_up_locked_sync_key (C function)c.__wake_up_locked_sync_keyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h^void __wake_up_locked_sync_key (struct wait_queue_head *wq_head, unsigned int mode, void *key)h]h)}(h]void __wake_up_locked_sync_key(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j)}(hvoidh]hvoid}(hj0YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,YhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubj=)}(h h]h }(hj?YhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,Yhhhj>YhKubh)}(h__wake_up_locked_sync_keyh]h)}(h__wake_up_locked_sync_keyh]h__wake_up_locked_sync_key}(hjQYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,Yhhhj>YhKubj )}(h?(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hjmYhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiYubj=)}(h h]h }(hjzYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiYubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jl)}j_jSYsbc.__wake_up_locked_sync_keyasbuh1hhjiYubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiYubh)}(hwq_headh]hwq_head}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiYubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeYubj&)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYubj)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj=)}(h h]h }(hj ZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYubh)}(hmodeh]hmode}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeYubj&)}(h void *keyh](j)}(hvoidh]hvoid}(hj0ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Zubj=)}(h h]h }(hj>ZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,Zubj)}(hjh]h*}(hjLZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Zubh)}(hkeyh]hkey}(hjYZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,Zubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeYubeh}(h]h ]h"]h$]h&]jj uh1jhj,Yhhhj>YhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(Yhhhj>YhKubah}(h]j#Yah ](jjeh"]h$]h&]jj)jhuh1hhj>YhKhj%Yhhubj )}(hhh]j9)}(h/wake up a thread blocked on a locked waitqueue.h]h/wake up a thread blocked on a locked waitqueue.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZhhubah}(h]h ]h"]h$]h&]uh1jhj%Yhhhj>YhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhjhNhNubjp)}(hXW**Parameters** ``struct wait_queue_head *wq_head`` the waitqueue ``unsigned int mode`` which threads ``void *key`` opaque value to be passed to wakeup targets **Description** The sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs. On UP it can prevent extra preemption. If this function wakes up a task, it executes a full memory barrier before accessing the task state.h](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]j?)}(hjZh]hstruct wait_queue_head *wq_head}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj)}(hhh]j9)}(h the waitqueueh]h the waitqueue}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhKhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhKhjZubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]j?)}(hjZh]hunsigned int mode}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj)}(hhh]j9)}(h which threadsh]h which threads}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjZubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]j?)}(hj6[h]h void *key}(hj8[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4[ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj0[ubj)}(hhh]j9)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjO[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjK[hKhjL[ubah}(h]h ]h"]h$]h&]uh1jhj0[ubeh}(h]h ]h"]h$]h&]uh1jhjK[hKhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hjq[h]h Description}(hjs[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo[ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj9)}(hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs.h]hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are ‘synchronized’ with each other. This can prevent needless bouncing between CPUs.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj9)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj9)}(hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.h]hdIf this function wakes up a task, it executes a full memory barrier before accessing the task state.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfinish_wait (C function) c.finish_waithNtauh1hhjhhhNhNubh)}(hhh](h)}(hUvoid finish_wait (struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h]h)}(hTvoid finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMoubj=)}(h h]h }(hj[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[hhhj[hMoubh)}(h finish_waith]h)}(h finish_waith]h finish_wait}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj[hhhj[hMoubj )}(hD(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)h](j&)}(hstruct wait_queue_head *wq_headh](j+)}(hj.h]hstruct}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj \ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj \ubh)}(hhh]h)}(hwait_queue_headh]hwait_queue_head}(hj/\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj1\modnameN classnameNjcjf)}ji]jl)}j_j[sb c.finish_waitasbuh1hhj \ubj=)}(h h]h }(hjO\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj \ubj)}(hjh]h*}(hj]\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \ubh)}(hwq_headh]hwq_head}(hjj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj \ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj \ubj&)}(h!struct wait_queue_entry *wq_entryh](j+)}(hj.h]hstruct}(hj\hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubh)}(hhh]h)}(hwait_queue_entryh]hwait_queue_entry}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jK\ c.finish_waitasbuh1hhj\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hwq_entryh]hwq_entry}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj \ubeh}(h]h ]h"]h$]h&]jj uh1jhj[hhhj[hMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhj[hMoubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1hhj[hMohj[hhubj )}(hhh]j9)}(h!clean up after waiting in a queueh]h!clean up after waiting in a queue}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMohj]hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hMoubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct wait_queue_head *wq_head`` waitqueue waited on ``struct wait_queue_entry *wq_entry`` wait descriptor **Description** Sets current thread back to running state and removes the wait descriptor from the given waitqueue if still queued.h](j9)}(h**Parameters**h]jz)}(hj&]h]h Parameters}(hj(]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$]ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMshj ]ubj)}(hhh](j)}(h8``struct wait_queue_head *wq_head`` waitqueue waited on h](j)}(h#``struct wait_queue_head *wq_head``h]j?)}(hjE]h]hstruct wait_queue_head *wq_head}(hjG]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMphj?]ubj)}(hhh]j9)}(hwaitqueue waited onh]hwaitqueue waited on}(hj^]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZ]hMphj[]ubah}(h]h ]h"]h$]h&]uh1jhj?]ubeh}(h]h ]h"]h$]h&]uh1jhjZ]hMphj<]ubj)}(h6``struct wait_queue_entry *wq_entry`` wait descriptor h](j)}(h%``struct wait_queue_entry *wq_entry``h]j?)}(hj~]h]h!struct wait_queue_entry *wq_entry}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMqhjx]ubj)}(hhh]j9)}(hwait descriptorh]hwait descriptor}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hMqhj]ubah}(h]h ]h"]h$]h&]uh1jhjx]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMqhj<]ubeh}(h]h ]h"]h$]h&]uh1jhj ]ubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMshj ]ubj9)}(hsSets current thread back to running state and removes the wait descriptor from the given waitqueue if still queued.h]hsSets current thread back to running state and removes the wait descriptor from the given waitqueue if still queued.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMrhj ]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubeh}(h]wait-queues-and-wake-eventsah ]h"]wait queues and wake eventsah$]h&]uh1hhhhhhhhK=ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhKFubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌwait_task_stopped (C function)c.wait_task_stoppedhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hOint wait_task_stopped (struct wait_opts *wo, int ptrace, struct task_struct *p)h]h)}(hNint wait_task_stopped(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM ubj=)}(h h]h }(hj&^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhj%^hM ubh)}(hwait_task_stoppedh]h)}(hwait_task_stoppedh]hwait_task_stopped}(hj8^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj%^hM ubj )}(h9(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j&)}(hstruct wait_opts *woh](j+)}(hj.h]hstruct}(hjT^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjP^ubj=)}(h h]h }(hja^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjP^ubh)}(hhh]h)}(h wait_optsh]h wait_opts}(hjr^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjo^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjt^modnameN classnameNjcjf)}ji]jl)}j_j:^sbc.wait_task_stoppedasbuh1hhjP^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjP^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP^ubh)}(hwoh]hwo}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjL^ubj&)}(h int ptraceh](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hptraceh]hptrace}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjL^ubj&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hj^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj^ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hhh]h)}(h task_structh]h task_struct}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj_modnameN classnameNjcjf)}ji]j^c.wait_task_stoppedasbuh1hhj^ubj=)}(h h]h }(hj7_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hjE_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hjh]hp}(hjR_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjL^ubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhj%^hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj%^hM ubah}(h]j ^ah ](jjeh"]h$]h&]jj)jhuh1hhj%^hM hj ^hhubj )}(hhh]j9)}(h,Wait for ``TASK_STOPPED`` or ``TASK_TRACED``h](h Wait for }(hj{_hhhNhNubj?)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{_ubh or }(hj{_hhhNhNubj?)}(h``TASK_TRACED``h]h TASK_TRACED}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{_ubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM hjx_hhubah}(h]h ]h"]h$]h&]uh1jhj ^hhhj%^hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj]hNhNubjp)}(hX{**Parameters** ``struct wait_opts *wo`` wait options ``int ptrace`` is the wait for ptrace ``struct task_struct *p`` task to wait for **Description** Handle sys_wait4() work for ``p`` in state ``TASK_STOPPED`` or ``TASK_TRACED``. **Context** read_lock(:c:type:`tasklist_lock`), which is released if return value is non-zero. Also, grabs and releases **p->sighand->siglock**. **Return** 0 if wait condition didn't exist and search for other wait conditions should continue. Non-zero return, -errno on failure and **p**'s pid on success, implies that tasklist_lock is released and wait condition search should terminate.h](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM$hj_ubj)}(hhh](j)}(h&``struct wait_opts *wo`` wait options h](j)}(h``struct wait_opts *wo``h]j?)}(hj_h]hstruct wait_opts *wo}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM!hj_ubj)}(hhh]j9)}(h wait optionsh]h wait options}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hM!hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM!hj_ubj)}(h&``int ptrace`` is the wait for ptrace h](j)}(h``int ptrace``h]j?)}(hj`h]h int ptrace}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM"hj`ubj)}(hhh]j9)}(his the wait for ptraceh]his the wait for ptrace}(hj.`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*`hM"hj+`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj*`hM"hj_ubj)}(h+``struct task_struct *p`` task to wait for h](j)}(h``struct task_struct *p``h]j?)}(hjN`h]hstruct task_struct *p}(hjP`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjL`ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM#hjH`ubj)}(hhh]j9)}(htask to wait forh]htask to wait for}(hjg`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjc`hM#hjd`ubah}(h]h ]h"]h$]h&]uh1jhjH`ubeh}(h]h ]h"]h$]h&]uh1jhjc`hM#hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM%hj_ubj9)}(hOHandle sys_wait4() work for ``p`` in state ``TASK_STOPPED`` or ``TASK_TRACED``.h](hHandle sys_wait4() work for }(hj`hhhNhNubj?)}(h``p``h]hp}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubh in state }(hj`hhhNhNubj?)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubh or }(hj`hhhNhNubj?)}(h``TASK_TRACED``h]h TASK_TRACED}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM$hj_ubj9)}(h **Context**h]jz)}(hj`h]hContext}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM&hj_ubj9)}(hread_lock(:c:type:`tasklist_lock`), which is released if return value is non-zero. Also, grabs and releases **p->sighand->siglock**.h](h read_lock(}(hj`hhhNhNubh)}(h:c:type:`tasklist_lock`h]j?)}(hjah]h tasklist_lock}(hjahhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj tasklist_lockuh1hhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM'hj`ubhL), which is released if return value is non-zero. Also, grabs and releases }(hj`hhhNhNubjz)}(h**p->sighand->siglock**h]hp->sighand->siglock}(hj(ahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj#ahM'hj_ubj9)}(h **Return**h]jz)}(hjBah]hReturn}(hjDahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@aubah}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM*hj_ubj9)}(h0 if wait condition didn't exist and search for other wait conditions should continue. Non-zero return, -errno on failure and **p**'s pid on success, implies that tasklist_lock is released and wait condition search should terminate.h](h0 if wait condition didn’t exist and search for other wait conditions should continue. Non-zero return, -errno on failure and }(hjXahhhNhNubjz)}(h**p**h]hp}(hj`ahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXaubhg’s pid on success, implies that tasklist_lock is released and wait condition search should terminate.}(hjXahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM+hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$task_set_jobctl_pending (C function)c.task_set_jobctl_pendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hKbool task_set_jobctl_pending (struct task_struct *task, unsigned long mask)h]h)}(hJbool task_set_jobctl_pending(struct task_struct *task, unsigned long mask)h](j)}(hjh]hbool}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjahMubh)}(htask_set_jobctl_pendingh]h)}(htask_set_jobctl_pendingh]htask_set_jobctl_pending}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjahMubj )}(h.(struct task_struct *task, unsigned long mask)h](j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjahhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjaubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubh)}(hhh]h)}(h task_structh]h task_struct}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjamodnameN classnameNjcjf)}ji]jl)}j_jasbc.task_set_jobctl_pendingasbuh1hhjaubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hj!bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(htaskh]htask}(hj.bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjGbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCbubj=)}(h h]h }(hjUbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCbubj)}(hlongh]hlong}(hjcbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCbubj=)}(h h]h }(hjqbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCbubh)}(hmaskh]hmask}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjahMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjahMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhjahMhjahhubj )}(hhh]j9)}(hset jobctl pending bitsh]hset jobctl pending bits}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jbj4jbj5j6j7uh1hhhhj]hNhNubjp)}(hXH**Parameters** ``struct task_struct *task`` target task ``unsigned long mask`` pending bits to set **Description** Clear **mask** from **task->jobctl**. **mask** must be subset of ``JOBCTL_PENDING_MASK`` | ``JOBCTL_STOP_CONSUME`` | ``JOBCTL_STOP_SIGMASK`` | ``JOBCTL_TRAPPING``. If stop signo is being set, the existing signo is cleared. If **task** is already being killed or exiting, this function becomes noop. **Context** Must be called with **task->sighand->siglock** held. **Return** ``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](j9)}(h**Parameters**h]jz)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjbubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j?)}(hjbh]hstruct task_struct *task}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjbubj)}(hhh]j9)}(h target taskh]h target task}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhM hjcubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hjbubj)}(h+``unsigned long mask`` pending bits to set h](j)}(h``unsigned long mask``h]j?)}(hj#ch]hunsigned long mask}(hj%chhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!cubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjcubj)}(hhh]j9)}(hpending bits to seth]hpending bits to set}(hjjobctl**. **mask** must be subset of ``JOBCTL_PENDING_MASK`` | ``JOBCTL_STOP_CONSUME`` | ``JOBCTL_STOP_SIGMASK`` | ``JOBCTL_TRAPPING``. If stop signo is being set, the existing signo is cleared. If **task** is already being killed or exiting, this function becomes noop.h](hClear }(hjtchhhNhNubjz)}(h**mask**h]hmask}(hj|chhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtcubh from }(hjtchhhNhNubjz)}(h**task->jobctl**h]h task->jobctl}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtcubh. }(hjtchhhNhNubjz)}(h**mask**h]hmask}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtcubh must be subset of }(hjtchhhNhNubj?)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtcubh | }(hjtchhhNhNubj?)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtcubh | }hjtcsbj?)}(h``JOBCTL_STOP_SIGMASK``h]hJOBCTL_STOP_SIGMASK}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtcubh | }(hjtchhhNhNubj?)}(h``JOBCTL_TRAPPING``h]hJOBCTL_TRAPPING}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtcubhB. If stop signo is being set, the existing signo is cleared. If }(hjtchhhNhNubjz)}(h**task**h]htask}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtcubh@ is already being killed or exiting, this function becomes noop.}(hjtchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjbubj9)}(h **Context**h]jz)}(hjdh]hContext}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjbubj9)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hj+dhhhNhNubjz)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hj3dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+dubh held.}(hj+dhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjbubj9)}(h **Return**h]jz)}(hjNdh]hReturn}(hjPdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLdubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjbubj9)}(hO``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](j?)}(h``true``h]htrue}(hjhdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjddubh if }(hjddhhhNhNubjz)}(h**mask**h]hmask}(hjzdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjddubh is set, }(hjddhhhNhNubj?)}(h ``false``h]hfalse}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjddubh if made noop because }(hjddhhhNhNubjz)}(h**task**h]htask}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjddubh was dying.}(hjddhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'task_clear_jobctl_trapping (C function)c.task_clear_jobctl_trappinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h:void task_clear_jobctl_trapping (struct task_struct *task)h]h)}(h9void task_clear_jobctl_trapping(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)ubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdhhhjdhM)ubh)}(htask_clear_jobctl_trappingh]h)}(htask_clear_jobctl_trappingh]htask_clear_jobctl_trapping}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjdhM)ubj )}(h(struct task_struct *task)h]j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjeubj=)}(h h]h }(hj!ehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hhh]h)}(h task_structh]h task_struct}(hj2ehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/eubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj4emodnameN classnameNjcjf)}ji]jl)}j_jdsbc.task_clear_jobctl_trappingasbuh1hhjeubj=)}(h h]h }(hjRehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubj)}(hjh]h*}(hj`ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(htaskh]htask}(hjmehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj eubah}(h]h ]h"]h$]h&]jj uh1jhjdhhhjdhM)ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhM)ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhjdhM)hjdhhubj )}(hhh]j9)}(hclear jobctl trapping bith]hclear jobctl trapping bit}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM)ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jej4jej5j6j7uh1hhhhj]hNhNubjp)}(hXr**Parameters** ``struct task_struct *task`` target task **Description** If JOBCTL_TRAPPING is set, a ptracer is waiting for us to enter TRACED. Clear it and wake up the ptracer. Note that we don't need any further locking. **task->siglock** guarantees that **task->parent** points to the ptracer. **Context** Must be called with **task->sighand->siglock** held.h](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-hjeubj)}(hhh]j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j?)}(hjeh]hstruct task_struct *task}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM*hjeubj)}(hhh]j9)}(h target taskh]h target task}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehM*hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehM*hjeubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM,hjeubj9)}(hIf JOBCTL_TRAPPING is set, a ptracer is waiting for us to enter TRACED. Clear it and wake up the ptracer. Note that we don't need any further locking. **task->siglock** guarantees that **task->parent** points to the ptracer.h](hIf JOBCTL_TRAPPING is set, a ptracer is waiting for us to enter TRACED. Clear it and wake up the ptracer. Note that we don’t need any further locking. }(hj)fhhhNhNubjz)}(h**task->siglock**h]h task->siglock}(hj1fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)fubh guarantees that }(hj)fhhhNhNubjz)}(h**task->parent**h]h task->parent}(hjCfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)fubh points to the ptracer.}(hj)fhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM+hjeubj9)}(h **Context**h]jz)}(hj^fh]hContext}(hj`fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\fubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM0hjeubj9)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjtfhhhNhNubjz)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hj|fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtfubh held.}(hjtfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&task_clear_jobctl_pending (C function)c.task_clear_jobctl_pendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hMvoid task_clear_jobctl_pending (struct task_struct *task, unsigned long mask)h]h)}(hLvoid task_clear_jobctl_pending(struct task_struct *task, unsigned long mask)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>ubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfhhhjfhM>ubh)}(htask_clear_jobctl_pendingh]h)}(htask_clear_jobctl_pendingh]htask_clear_jobctl_pending}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjfhM>ubj )}(h.(struct task_struct *task, unsigned long mask)h](j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjfubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubh)}(hhh]h)}(h task_structh]h task_struct}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj gubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjgmodnameN classnameNjcjf)}ji]jl)}j_jfsbc.task_clear_jobctl_pendingasbuh1hhjfubj=)}(h h]h }(hj0ghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubj)}(hjh]h*}(hj>ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(htaskh]htask}(hjKghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjfubj&)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjdghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`gubj=)}(h h]h }(hjrghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`gubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`gubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`gubh)}(hmaskh]hmask}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`gubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjfubeh}(h]h ]h"]h$]h&]jj uh1jhjfhhhjfhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhjfhM>ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1hhjfhM>hjfhhubj )}(hhh]j9)}(hclear jobctl pending bitsh]hclear jobctl pending bits}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>hjghhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *task`` target task ``unsigned long mask`` pending bits to clear **Description** Clear **mask** from **task->jobctl**. **mask** must be subset of ``JOBCTL_PENDING_MASK``. If ``JOBCTL_STOP_PENDING`` is being cleared, other STOP bits are cleared together. If clearing of **mask** leaves no stop or trap pending, this function calls task_clear_jobctl_trapping(). **Context** Must be called with **task->sighand->siglock** held.h](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhjgubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]j?)}(hjhh]hstruct task_struct *task}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjhubj)}(hhh]j9)}(h target taskh]h target task}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhM?hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhM?hjgubj)}(h-``unsigned long mask`` pending bits to clear h](j)}(h``unsigned long mask``h]j?)}(hj@hh]hunsigned long mask}(hjBhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>hubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hj:hubj)}(hhh]j9)}(hpending bits to clearh]hpending bits to clear}(hjYhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhhM@hjVhubah}(h]h ]h"]h$]h&]uh1jhj:hubeh}(h]h ]h"]h$]h&]uh1jhjUhhM@hjgubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h**Description**h]jz)}(hj{hh]h Description}(hj}hhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyhubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhjgubj9)}(hClear **mask** from **task->jobctl**. **mask** must be subset of ``JOBCTL_PENDING_MASK``. If ``JOBCTL_STOP_PENDING`` is being cleared, other STOP bits are cleared together.h](hClear }(hjhhhhNhNubjz)}(h**mask**h]hmask}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh from }(hjhhhhNhNubjz)}(h**task->jobctl**h]h task->jobctl}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh. }(hjhhhhNhNubjz)}(h**mask**h]hmask}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh must be subset of }(hjhhhhNhNubj?)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubh. If }(hjhhhhNhNubj?)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubh8 is being cleared, other STOP bits are cleared together.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMAhjgubj9)}(hiIf clearing of **mask** leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().h](hIf clearing of }(hjhhhhNhNubjz)}(h**mask**h]hmask}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubhR leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhjgubj9)}(h **Context**h]jz)}(hjih]hContext}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhjgubj9)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hj3ihhhNhNubjz)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hj;ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3iubh held.}(hj3ihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMIhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(task_participate_group_stop (C function)c.task_participate_group_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;bool task_participate_group_stop (struct task_struct *task)h]h)}(h:bool task_participate_group_stop(struct task_struct *task)h](j)}(hjh]hbool}(hjtihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpihhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpihhhjihMZubh)}(htask_participate_group_stoph]h)}(htask_participate_group_stoph]htask_participate_group_stop}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjpihhhjihMZubj )}(h(struct task_struct *task)h]j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjihhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hhh]h)}(h task_structh]h task_struct}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjimodnameN classnameNjcjf)}ji]jl)}j_jisbc.task_participate_group_stopasbuh1hhjiubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(htaskh]htask}(hj jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubah}(h]h ]h"]h$]h&]jj uh1jhjpihhhjihMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlihhhjihMZubah}(h]jgiah ](jjeh"]h$]h&]jj)jhuh1hhjihMZhjiihhubj )}(hhh]j9)}(hparticipate in a group stoph]hparticipate in a group stop}(hj3jhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZhj0jhhubah}(h]h ]h"]h$]h&]uh1jhjiihhhjihMZubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKjj4jKjj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *task`` task participating in a group stop **Description** **task** has ``JOBCTL_STOP_PENDING`` set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if ``JOBCTL_STOP_CONSUME`` was set. If the consumption completes the group stop, the appropriate `SIGNAL_*` flags are set. **Context** Must be called with **task->sighand->siglock** held. **Return** ``true`` if group stop completion should be notified to the parent, ``false`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjUjh]h Parameters}(hjWjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^hjOjubj)}(hhh]j)}(h@``struct task_struct *task`` task participating in a group stop h](j)}(h``struct task_struct *task``h]j?)}(hjtjh]hstruct task_struct *task}(hjvjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[hjnjubj)}(hhh]j9)}(h"task participating in a group stoph]h"task participating in a group stop}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhM[hjjubah}(h]h ]h"]h$]h&]uh1jhjnjubeh}(h]h ]h"]h$]h&]uh1jhjjhM[hjkjubah}(h]h ]h"]h$]h&]uh1jhjOjubj9)}(h**Description**h]jz)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM]hjOjubj9)}(hX **task** has ``JOBCTL_STOP_PENDING`` set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if ``JOBCTL_STOP_CONSUME`` was set. If the consumption completes the group stop, the appropriate `SIGNAL_*` flags are set.h](jz)}(h**task**h]htask}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh has }(hjjhhhNhNubj?)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubhq set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if }(hjjhhhNhNubj?)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubhH was set. If the consumption completes the group stop, the appropriate }(hjjhhhNhNubhtitle_reference)}(h `SIGNAL_*`h]hSIGNAL_*}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjjubh flags are set.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM\hjOjubj9)}(h **Context**h]jz)}(hjkh]hContext}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMahjOjubj9)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hj2khhhNhNubjz)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hj:khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2kubh held.}(hj2khhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMbhjOjubj9)}(h **Return**h]jz)}(hjUkh]hReturn}(hjWkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSkubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMdhjOjubj9)}(hX``true`` if group stop completion should be notified to the parent, ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjokhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkkubh< if group stop completion should be notified to the parent, }(hjkkhhhNhNubj?)}(h ``false``h]hfalse}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkkubh otherwise.}(hjkkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMehjOjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌptrace_trap_notify (C function)c.ptrace_trap_notifyhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h/void ptrace_trap_notify (struct task_struct *t)h]h)}(h.void ptrace_trap_notify(struct task_struct *t)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkhhhjkhMDubh)}(hptrace_trap_notifyh]h)}(hptrace_trap_notifyh]hptrace_trap_notify}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhjkhMDubj )}(h(struct task_struct *t)h]j&)}(hstruct task_struct *th](j+)}(hj.h]hstruct}(hjkhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjkubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubh)}(hhh]h)}(h task_structh]h task_struct}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjlmodnameN classnameNjcjf)}ji]jl)}j_jksbc.ptrace_trap_notifyasbuh1hhjkubj=)}(h h]h }(hj5lhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hjClhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hth]ht}(hjPlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubah}(h]h ]h"]h$]h&]jj uh1jhjkhhhjkhMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjkhMDubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1hhjkhMDhjkhhubj )}(hhh]j9)}(hschedule trap to notify ptracerh]hschedule trap to notify ptracer}(hjzlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDhjwlhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhj]hNhNubjp)}(hXn**Parameters** ``struct task_struct *t`` tracee wanting to notify tracer **Description** This function schedules sticky ptrace trap which is cleared on the next TRAP_STOP to notify ptracer of an event. **t** must have been seized by ptracer. If **t** is running, STOP trap will be taken. If trapped for STOP and ptracer is listening for events, tracee is woken up so that it can re-trap for the new event. If trapped otherwise, STOP trap will be eventually taken without returning to userland after the existing traps are finished by PTRACE_CONT. **Context** Must be called with **task->sighand->siglock** held.h](j9)}(h**Parameters**h]jz)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhjlubj)}(hhh]j)}(h:``struct task_struct *t`` tracee wanting to notify tracer h](j)}(h``struct task_struct *t``h]j?)}(hjlh]hstruct task_struct *t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhjlubj)}(hhh]j9)}(htracee wanting to notify tracerh]htracee wanting to notify tracer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMEhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMEhjlubah}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h**Description**h]jz)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMGhjlubj9)}(hThis function schedules sticky ptrace trap which is cleared on the next TRAP_STOP to notify ptracer of an event. **t** must have been seized by ptracer.h](hrThis function schedules sticky ptrace trap which is cleared on the next TRAP_STOP to notify ptracer of an event. }(hj mhhhNhNubjz)}(h**t**h]ht}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj mubh" must have been seized by ptracer.}(hj mhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMFhjlubj9)}(hX2If **t** is running, STOP trap will be taken. If trapped for STOP and ptracer is listening for events, tracee is woken up so that it can re-trap for the new event. If trapped otherwise, STOP trap will be eventually taken without returning to userland after the existing traps are finished by PTRACE_CONT.h](hIf }(hj-mhhhNhNubjz)}(h**t**h]ht}(hj5mhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-mubhX* is running, STOP trap will be taken. If trapped for STOP and ptracer is listening for events, tracee is woken up so that it can re-trap for the new event. If trapped otherwise, STOP trap will be eventually taken without returning to userland after the existing traps are finished by PTRACE_CONT.}(hj-mhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMJhjlubj9)}(h **Context**h]jz)}(hjPmh]hContext}(hjRmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNmubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMPhjlubj9)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjfmhhhNhNubjz)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjnmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfmubh held.}(hjfmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMQhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌforce_sig_seccomp (C function)c.force_sig_seccomphNtauh1hhj]hhhNhNubh)}(hhh](h)}(hDint force_sig_seccomp (int syscall, int reason, bool force_coredump)h]h)}(hCint force_sig_seccomp(int syscall, int reason, bool force_coredump)h](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmhhhjmhM ubh)}(hforce_sig_seccomph]h)}(hforce_sig_seccomph]hforce_sig_seccomp}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhjmhM ubj )}(h.(int syscall, int reason, bool force_coredump)h](j&)}(h int syscallh](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubh)}(hsyscallh]hsyscall}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(h int reasonh](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj=)}(h h]h }(hj'nhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubh)}(hreasonh]hreason}(hj5nhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(hbool force_coredumph](j)}(hjh]hbool}(hjNnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJnubj=)}(h h]h }(hj[nhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJnubh)}(hforce_coredumph]hforce_coredump}(hjinhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubeh}(h]h ]h"]h$]h&]jj uh1jhjmhhhjmhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjmhhhjmhM ubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1hhjmhM hjmhhubj )}(hhh]j9)}(h6signals the task to allow in-process syscall emulationh]h6signals the task to allow in-process syscall emulation}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjnhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jnj4jnj5j6j7uh1hhhhj]hNhNubjp)}(hX!**Parameters** ``int syscall`` syscall number to send to userland ``int reason`` filter-supplied reason code to send to userland (via si_errno) ``bool force_coredump`` true to trigger a coredump **Description** Forces a SIGSYS with a code of SYS_SECCOMP and related sigsys info.h](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjnubj)}(hhh](j)}(h3``int syscall`` syscall number to send to userland h](j)}(h``int syscall``h]j?)}(hjnh]h int syscall}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjnubj)}(hhh]j9)}(h"syscall number to send to userlandh]h"syscall number to send to userland}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hjnubj)}(hN``int reason`` filter-supplied reason code to send to userland (via si_errno) h](j)}(h``int reason``h]j?)}(hj oh]h int reason}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj oubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjoubj)}(hhh]j9)}(h>filter-supplied reason code to send to userland (via si_errno)h]h>filter-supplied reason code to send to userland (via si_errno)}(hj&ohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"ohMhj#oubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj"ohMhjnubj)}(h3``bool force_coredump`` true to trigger a coredump h](j)}(h``bool force_coredump``h]j?)}(hjFoh]hbool force_coredump}(hjHohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDoubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj@oubj)}(hhh]j9)}(htrue to trigger a coredumph]htrue to trigger a coredump}(hj_ohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[ohMhj\oubah}(h]h ]h"]h$]h&]uh1jhj@oubeh}(h]h ]h"]h$]h&]uh1jhj[ohMhjnubeh}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjnubj9)}(hCForces a SIGSYS with a code of SYS_SECCOMP and related sigsys info.h]hCForces a SIGSYS with a code of SYS_SECCOMP and related sigsys info.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%do_notify_parent_cldstop (C function)c.do_notify_parent_cldstophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hRvoid do_notify_parent_cldstop (struct task_struct *tsk, bool for_ptracer, int why)h]h)}(hQvoid do_notify_parent_cldstop(struct task_struct *tsk, bool for_ptracer, int why)h](j)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjohhhjohMubh)}(hdo_notify_parent_cldstoph]h)}(hdo_notify_parent_cldstoph]hdo_notify_parent_cldstop}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjohMubj )}(h4(struct task_struct *tsk, bool for_ptracer, int why)h](j&)}(hstruct task_struct *tskh](j+)}(hj.h]hstruct}(hjphhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjoubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubh)}(hhh]h)}(h task_structh]h task_struct}(hj!phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#pmodnameN classnameNjcjf)}ji]jl)}j_josbc.do_notify_parent_cldstopasbuh1hhjoubj=)}(h h]h }(hjAphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubj)}(hjh]h*}(hjOphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(htskh]htsk}(hj\phhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjoubj&)}(hbool for_ptracerh](j)}(hjh]hbool}(hjuphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqpubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqpubh)}(h for_ptracerh]h for_ptracer}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjoubj&)}(hint whyh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubh)}(hwhyh]hwhy}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjoubeh}(h]h ]h"]h$]h&]jj uh1jhjohhhjohMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjohMubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1hhjohMhjohhubj )}(hhh]j9)}(h/notify parent of stopped/continued state changeh]h/notify parent of stopped/continued state change}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjphhubah}(h]h ]h"]h$]h&]uh1jhjohhhjohMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *tsk`` task reporting the state change ``bool for_ptracer`` the notification is for ptracer ``int why`` CLD_{CONTINUED|STOPPED|TRAPPED} to report **Description** Notify **tsk**'s parent that the stopped/continued state has changed. If **for_ptracer** is ``false``, **tsk**'s group leader notifies to its real parent. If ``true``, **tsk** reports to **tsk->parent** which should be the ptracer. **Context** Must be called with tasklist_lock at least read locked.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj qubj)}(hhh](j)}(h<``struct task_struct *tsk`` task reporting the state change h](j)}(h``struct task_struct *tsk``h]j?)}(hj0qh]hstruct task_struct *tsk}(hj2qhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.qubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj*qubj)}(hhh]j9)}(htask reporting the state changeh]htask reporting the state change}(hjIqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEqhMhjFqubah}(h]h ]h"]h$]h&]uh1jhj*qubeh}(h]h ]h"]h$]h&]uh1jhjEqhMhj'qubj)}(h5``bool for_ptracer`` the notification is for ptracer h](j)}(h``bool for_ptracer``h]j?)}(hjiqh]hbool for_ptracer}(hjkqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjcqubj)}(hhh]j9)}(hthe notification is for ptracerh]hthe notification is for ptracer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~qhMhjqubah}(h]h ]h"]h$]h&]uh1jhjcqubeh}(h]h ]h"]h$]h&]uh1jhj~qhMhj'qubj)}(h6``int why`` CLD_{CONTINUED|STOPPED|TRAPPED} to report h](j)}(h ``int why``h]j?)}(hjqh]hint why}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjqubj)}(hhh]j9)}(h)CLD_{CONTINUED|STOPPED|TRAPPED} to reporth]h)CLD_{CONTINUED|STOPPED|TRAPPED} to report}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhj'qubeh}(h]h ]h"]h$]h&]uh1jhj qubj9)}(h**Description**h]jz)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj qubj9)}(hNotify **tsk**'s parent that the stopped/continued state has changed. If **for_ptracer** is ``false``, **tsk**'s group leader notifies to its real parent. If ``true``, **tsk** reports to **tsk->parent** which should be the ptracer.h](hNotify }(hjqhhhNhNubjz)}(h**tsk**h]htsk}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh>’s parent that the stopped/continued state has changed. If }(hjqhhhNhNubjz)}(h**for_ptracer**h]h for_ptracer}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh is }(hjqhhhNhNubj?)}(h ``false``h]hfalse}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubh, }(hjqhhhNhNubjz)}(h**tsk**h]htsk}(hj1rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh2’s group leader notifies to its real parent. If }(hjqhhhNhNubj?)}(h``true``h]htrue}(hjCrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubh, }hjqsbjz)}(h**tsk**h]htsk}(hjUrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh reports to }(hjqhhhNhNubjz)}(h**tsk->parent**h]h tsk->parent}(hjgrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh which should be the ptracer.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj qubj9)}(h **Context**h]jz)}(hjrh]hContext}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj qubj9)}(h7Must be called with tasklist_lock at least read locked.h]h7Must be called with tasklist_lock at least read locked.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj qubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_signal_stop (C function)c.do_signal_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool do_signal_stop (int signr)h]h)}(hbool do_signal_stop(int signr)h](j)}(hjh]hbool}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrhhhjrhM ubh)}(hdo_signal_stoph]h)}(hdo_signal_stoph]hdo_signal_stop}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhjrhM ubj )}(h (int signr)h]j&)}(h int signrh](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrubh)}(hsignrh]hsignr}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjrubah}(h]h ]h"]h$]h&]jj uh1jhjrhhhjrhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjrhM ubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjrhM hjrhhubj )}(hhh]j9)}(h4handle group stop for SIGSTOP and other stop signalsh]h4handle group stop for SIGSTOP and other stop signals}(hjIshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjFshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jasj4jasj5j6j7uh1hhhhj]hNhNubjp)}(hX#**Parameters** ``int signr`` signr causing group stop if initiating **Description** If ``JOBCTL_STOP_PENDING`` is not set yet, initiate group stop with **signr** and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), ``true`` is returned with siglock released. If ptraced, this function doesn't handle stop itself. Instead, ``JOBCTL_TRAP_STOP`` is scheduled and ``false`` is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards. **Context** Must be called with **current->sighand->siglock** held, which is released on ``true`` return. **Return** ``false`` if group stop is already cancelled or ptrace trap is scheduled. ``true`` if participated in group stop.h](j9)}(h**Parameters**h]jz)}(hjksh]h Parameters}(hjmshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjisubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj)}(hhh]j)}(h5``int signr`` signr causing group stop if initiating h](j)}(h ``int signr``h]j?)}(hjsh]h int signr}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjsubj)}(hhh]j9)}(h&signr causing group stop if initiatingh]h&signr causing group stop if initiating}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjesubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(hIf ``JOBCTL_STOP_PENDING`` is not set yet, initiate group stop with **signr** and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), ``true`` is returned with siglock released.h](hIf }(hjshhhNhNubj?)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh* is not set yet, initiate group stop with }(hjshhhNhNubjz)}(h **signr**h]hsignr}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), }(hjshhhNhNubj?)}(h``true``h]htrue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubh# is returned with siglock released.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(hIf ptraced, this function doesn't handle stop itself. Instead, ``JOBCTL_TRAP_STOP`` is scheduled and ``false`` is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.h](hBIf ptraced, this function doesn’t handle stop itself. Instead, }(hj thhhNhNubj?)}(h``JOBCTL_TRAP_STOP``h]hJOBCTL_TRAP_STOP}(hj(thhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj tubh is scheduled and }(hj thhhNhNubj?)}(h ``false``h]hfalse}(hj:thhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj tubhr is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.}(hj thhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(h **Context**h]jz)}(hjUth]hContext}(hjWthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjStubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(h]Must be called with **current->sighand->siglock** held, which is released on ``true`` return.h](hMust be called with }(hjkthhhNhNubjz)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjsthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjktubh held, which is released on }(hjkthhhNhNubj?)}(h``true``h]htrue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjktubh return.}(hjkthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubj9)}(hq``false`` if group stop is already cancelled or ptrace trap is scheduled. ``true`` if participated in group stop.h](j?)}(h ``false``h]hfalse}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubhA if group stop is already cancelled or ptrace trap is scheduled. }(hjthhhNhNubj?)}(h``true``h]htrue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubh if participated in group stop.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjesubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_jobctl_trap (C function)c.do_jobctl_traphNtauh1hhj]hhhNhNubh)}(hhh](h)}(hvoid do_jobctl_trap (void)h]h)}(hvoid do_jobctl_trap(void)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^ ubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuhhhjuhM^ ubh)}(hdo_jobctl_traph]h)}(hdo_jobctl_traph]hdo_jobctl_trap}(hj&uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"uubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjuhM^ ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjBuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>uubah}(h]h ]h"]h$]h&]noemphjj uh1j%hj:uubah}(h]h ]h"]h$]h&]jj uh1jhjuhhhjuhM^ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjuhM^ ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1hhjuhM^ hjthhubj )}(hhh]j9)}(h take care of ptrace jobctl trapsh]h take care of ptrace jobctl traps}(hjluhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^ hjiuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjuhM^ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj]hNhNubjp)}(hX'**Parameters** ``void`` no arguments **Description** When PT_SEIZED, it's used for both group stop and explicit SEIZE/INTERRUPT traps. Both generate PTRACE_EVENT_STOP trap with accompanying siginfo. If stopped, lower eight bits of exit_code contain the stop signal; otherwise, ``SIGTRAP``. When !PT_SEIZED, it's used only for group stop trap with stop signal number as exit_code and no siginfo. **Context** Must be called with **current->sighand->siglock** held, which may be released and re-acquired before returning with intervening sleep.h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMb hjuubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjuh]hvoid}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjuubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhKhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjuubah}(h]h ]h"]h$]h&]uh1jhjuubj9)}(h**Description**h]jz)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjuubj9)}(hWhen PT_SEIZED, it's used for both group stop and explicit SEIZE/INTERRUPT traps. Both generate PTRACE_EVENT_STOP trap with accompanying siginfo. If stopped, lower eight bits of exit_code contain the stop signal; otherwise, ``SIGTRAP``.h](hWhen PT_SEIZED, it’s used for both group stop and explicit SEIZE/INTERRUPT traps. Both generate PTRACE_EVENT_STOP trap with accompanying siginfo. If stopped, lower eight bits of exit_code contain the stop signal; otherwise, }(hjuhhhNhNubj?)}(h ``SIGTRAP``h]hSIGTRAP}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM_ hjuubj9)}(hhWhen !PT_SEIZED, it's used only for group stop trap with stop signal number as exit_code and no siginfo.h]hjWhen !PT_SEIZED, it’s used only for group stop trap with stop signal number as exit_code and no siginfo.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMd hjuubj9)}(h **Context**h]jz)}(hj0vh]hContext}(hj2vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.vubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMg hjuubj9)}(hMust be called with **current->sighand->siglock** held, which may be released and re-acquired before returning with intervening sleep.h](hMust be called with }(hjFvhhhNhNubjz)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjNvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFvubhU held, which may be released and re-acquired before returning with intervening sleep.}(hjFvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMh hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_freezer_trap (C function)c.do_freezer_traphNtauh1hhj]hhhNhNubh)}(hhh](h)}(hvoid do_freezer_trap (void)h]h)}(hvoid do_freezer_trap(void)h](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvhhhjvhM ubh)}(hdo_freezer_traph]h)}(hdo_freezer_traph]hdo_freezer_trap}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjvhM ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjvubah}(h]h ]h"]h$]h&]jj uh1jhjvhhhjvhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjvhM ubah}(h]jzvah ](jjeh"]h$]h&]jj)jhuh1hhjvhM hj|vhhubj )}(hhh]j9)}(hhandle the freezer jobctl traph]hhandle the freezer jobctl trap}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jhj|vhhhjvhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``void`` no arguments **Description** Puts the task into frozen state, if only the task is not about to quit. In this case it drops JOBCTL_TRAP_FREEZE. **Context** Must be called with **current->sighand->siglock** held, which is always released before returning.h](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj wubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj/wh]hvoid}(hj1whhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-wubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj)wubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjHwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDwhKhjEwubah}(h]h ]h"]h$]h&]uh1jhj)wubeh}(h]h ]h"]h$]h&]uh1jhjDwhKhj&wubah}(h]h ]h"]h$]h&]uh1jhj wubj9)}(h**Description**h]jz)}(hjjwh]h Description}(hjlwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhwubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj wubj9)}(hqPuts the task into frozen state, if only the task is not about to quit. In this case it drops JOBCTL_TRAP_FREEZE.h]hqPuts the task into frozen state, if only the task is not about to quit. In this case it drops JOBCTL_TRAP_FREEZE.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj wubj9)}(h **Context**h]jz)}(hjwh]hContext}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj wubj9)}(hbMust be called with **current->sighand->siglock** held, which is always released before returning.h](hMust be called with }(hjwhhhNhNubjz)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh1 held, which is always released before returning.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj wubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsignal_delivered (C function)c.signal_deliveredhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h:void signal_delivered (struct ksignal *ksig, int stepping)h]h)}(h9void signal_delivered(struct ksignal *ksig, int stepping)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjwhM ubh)}(hsignal_deliveredh]h)}(hsignal_deliveredh]hsignal_delivered}(hj xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjwhM ubj )}(h$(struct ksignal *ksig, int stepping)h](j&)}(hstruct ksignal *ksigh](j+)}(hj.h]hstruct}(hj%xhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!xubj=)}(h h]h }(hj2xhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!xubh)}(hhh]h)}(hksignalh]hksignal}(hjCxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@xubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjExmodnameN classnameNjcjf)}ji]jl)}j_j xsbc.signal_deliveredasbuh1hhj!xubj=)}(h h]h }(hjcxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!xubj)}(hjh]h*}(hjqxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!xubh)}(hksigh]hksig}(hj~xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!xubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjxubj&)}(h int steppingh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubh)}(hsteppingh]hstepping}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjxubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjwhM ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjwhM hjwhhubj )}(hhh]j9)}(h6called after signal delivery to update blocked signalsh]h6called after signal delivery to update blocked signals}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct ksignal *ksig`` kernel signal struct ``int stepping`` nonzero if debugger single-step or block-step in use **Description** This function should be called when a signal has successfully been delivered. It updates the blocked signals accordingly (**ksig->ka.sa.sa_mask** is always blocked), and the signal itself is blocked unless ``SA_NODEFER`` is set in **ksig->ka.sa.sa_flags**. Tracing is notified.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubj)}(hhh](j)}(h.``struct ksignal *ksig`` kernel signal struct h](j)}(h``struct ksignal *ksig``h]j?)}(hjyh]hstruct ksignal *ksig}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjyubj)}(hhh]j9)}(hkernel signal structh]hkernel signal struct}(hj7yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3yhM hj4yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj3yhM hjyubj)}(hF``int stepping`` nonzero if debugger single-step or block-step in use h](j)}(h``int stepping``h]j?)}(hjWyh]h int stepping}(hjYyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUyubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjQyubj)}(hhh]j9)}(h4nonzero if debugger single-step or block-step in useh]h4nonzero if debugger single-step or block-step in use}(hjpyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlyhM hjmyubah}(h]h ]h"]h$]h&]uh1jhjQyubeh}(h]h ]h"]h$]h&]uh1jhjlyhM hjyubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubj9)}(hXThis function should be called when a signal has successfully been delivered. It updates the blocked signals accordingly (**ksig->ka.sa.sa_mask** is always blocked), and the signal itself is blocked unless ``SA_NODEFER`` is set in **ksig->ka.sa.sa_flags**. Tracing is notified.h](hzThis function should be called when a signal has successfully been delivered. It updates the blocked signals accordingly (}(hjyhhhNhNubjz)}(h**ksig->ka.sa.sa_mask**h]hksig->ka.sa.sa_mask}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh= is always blocked), and the signal itself is blocked unless }(hjyhhhNhNubj?)}(h``SA_NODEFER``h]h SA_NODEFER}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubh is set in }(hjyhhhNhNubjz)}(h**ksig->ka.sa.sa_flags**h]hksig->ka.sa.sa_flags}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh. Tracing is notified.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_restart_syscall (C function)c.sys_restart_syscallhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hlong sys_restart_syscall (void)h]h)}(hlong sys_restart_syscall(void)h](j)}(hlongh]hlong}(hj zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMc ubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj zhhhjzhMc ubh)}(hsys_restart_syscallh]h)}(hsys_restart_syscallh]hsys_restart_syscall}(hj.zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*zubah}(h]h ](jjeh"]h$]h&]jj uh1hhj zhhhjzhMc ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjJzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFzubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjBzubah}(h]h ]h"]h$]h&]jj uh1jhj zhhhjzhMc ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjzhhhjzhMc ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjzhMc hjzhhubj )}(hhh]j9)}(hrestart a system callh]hrestart a system call}(hjtzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMc hjqzhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMc ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jzj4jzj5j6j7uh1hhhhj]hNhNubjp)}(h'**Parameters** ``void`` no argumentsh](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMg hjzubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j?)}(hjzh]hvoid}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMi hjzubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMi hjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ set_current_blocked (C function)c.set_current_blockedhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h+void set_current_blocked (sigset_t *newset)h]h)}(h*void set_current_blocked(sigset_t *newset)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj {hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM} ubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj {hhhj{hM} ubh)}(hset_current_blockedh]h)}(hset_current_blockedh]hset_current_blocked}(hj0{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj {hhhj{hM} ubj )}(h(sigset_t *newset)h]j&)}(hsigset_t *newseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hjO{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL{ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQ{modnameN classnameNjcjf)}ji]jl)}j_j2{sbc.set_current_blockedasbuh1hhjH{ubj=)}(h h]h }(hjo{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjH{ubj)}(hjh]h*}(hj}{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH{ubh)}(hnewseth]hnewset}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjH{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjD{ubah}(h]h ]h"]h$]h&]jj uh1jhj {hhhj{hM} ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj{hM} ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhj{hM} hj{hhubj )}(hhh]j9)}(hchange current->blocked maskh]hchange current->blocked mask}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM} hj{hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hM} ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``sigset_t *newset`` new mask **Description** It is wrong to change ->blocked directly, this helper should be used to ensure the process can't miss a shared signal we are going to block.h](j9)}(h**Parameters**h]jz)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj{ubj)}(hhh]j)}(h``sigset_t *newset`` new mask h](j)}(h``sigset_t *newset``h]j?)}(hj{h]hsigset_t *newset}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM~ hj{ubj)}(hhh]j9)}(hnew maskh]hnew mask}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj |hM~ hj |ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj |hM~ hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hj0|h]h Description}(hj2|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.|ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj{ubj9)}(hIt is wrong to change ->blocked directly, this helper should be used to ensure the process can't miss a shared signal we are going to block.h]hIt is wrong to change ->blocked directly, this helper should be used to ensure the process can’t miss a shared signal we are going to block.}(hjF|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigprocmask (C function)c.sys_rt_sigprocmaskhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hdlong sys_rt_sigprocmask (int how, sigset_t __user * nset, sigset_t __user * oset, size_t sigsetsize)h]h)}(halong sys_rt_sigprocmask(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j)}(hlongh]hlong}(hju|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq|hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjq|hhhj|hM ubh)}(hsys_rt_sigprocmaskh]h)}(hsys_rt_sigprocmaskh]hsys_rt_sigprocmask}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjq|hhhj|hM ubj )}(hJ(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j&)}(hint howh](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh)}(hhowh]hhow}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(hsigset_t __user *nseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jl)}j_j|sbc.sys_rt_sigprocmaskasbuh1hhj|ubj=)}(h h]h }(hj }hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh__user}(hj|hhhNhNubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubj)}(hjh]h*}(hj*}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hnseth]hnset}(hj7}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(hsigset_t __user *oseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hjS}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjU}modnameN classnameNjcjf)}ji]j}c.sys_rt_sigprocmaskasbuh1hhjL}ubj=)}(h h]h }(hjq}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjL}ubh__user}(hjL}hhhNhNubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjL}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL}ubh)}(hoseth]hoset}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj}modnameN classnameNjcjf)}ji]j}c.sys_rt_sigprocmaskasbuh1hhj}ubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubh)}(h sigsetsizeh]h sigsetsize}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjq|hhhj|hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjm|hhhj|hM ubah}(h]jh|ah ](jjeh"]h$]h&]jj)jhuh1hhj|hM hjj|hhubj )}(hhh]j9)}(h,change the list of currently blocked signalsh]h,change the list of currently blocked signals}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj ~hhubah}(h]h ]h"]h$]h&]uh1jhjj|hhhj|hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(~j4j(~j5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``int how`` whether to add, remove, or set signals ``sigset_t __user * nset`` stores pending signals ``sigset_t __user * oset`` previous value of signal mask if non-null ``size_t sigsetsize`` size of sigset_t typeh](j9)}(h**Parameters**h]jz)}(hj2~h]h Parameters}(hj4~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0~ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj,~ubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]j?)}(hjQ~h]hint how}(hjS~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjO~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjK~ubj)}(hhh]j9)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjf~hM hjg~ubah}(h]h ]h"]h$]h&]uh1jhjK~ubeh}(h]h ]h"]h$]h&]uh1jhjf~hM hjH~ubj)}(h2``sigset_t __user * nset`` stores pending signals h](j)}(h``sigset_t __user * nset``h]j?)}(hj~h]hsigset_t __user * nset}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj)}(hhh]j9)}(hstores pending signalsh]hstores pending signals}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hjH~ubj)}(hE``sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``sigset_t __user * oset``h]j?)}(hj~h]hsigset_t __user * oset}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj)}(hhh]j9)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hjH~ubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j?)}(hj~h]hsize_t sigsetsize}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj~ubj)}(hhh]j9)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjH~ubeh}(h]h ]h"]h$]h&]uh1jhj,~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigpending (C function)c.sys_rt_sigpendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hBlong sys_rt_sigpending (sigset_t __user * uset, size_t sigsetsize)h]h)}(h@long sys_rt_sigpending(sigset_t __user *uset, size_t sigsetsize)h](j)}(hlongh]hlong}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM7 ubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjdhM7 ubh)}(hsys_rt_sigpendingh]h)}(hsys_rt_sigpendingh]hsys_rt_sigpending}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjdhM7 ubj )}(h*(sigset_t __user *uset, size_t sigsetsize)h](j&)}(hsigset_t __user *useth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jysbc.sys_rt_sigpendingasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(huseth]huset}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.sys_rt_sigpendingasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(h sigsetsizeh]h sigsetsize}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjdhM7 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjdhM7 ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhjdhM7 hjKhhubj )}(hhh]j9)}(h;examine a pending signal that has been raised while blockedh]h;examine a pending signal that has been raised while blocked}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM7 hjRhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhM7 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj]hNhNubjp)}(h|**Parameters** ``sigset_t __user * uset`` stores pending signals ``size_t sigsetsize`` size of sigset_t type or largerh](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM; hjqubj)}(hhh](j)}(h2``sigset_t __user * uset`` stores pending signals h](j)}(h``sigset_t __user * uset``h]j?)}(hjh]hsigset_t __user * uset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM9 hjubj)}(hhh]j9)}(hstores pending signalsh]hstores pending signals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubj)}(h5``size_t sigsetsize`` size of sigset_t type or largerh](j)}(h``size_t sigsetsize``h]j?)}(hjπh]hsize_t sigsetsize}(hjрhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj̀ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM; hjɀubj)}(hhh]j9)}(hsize of sigset_t type or largerh]hsize of sigset_t type or larger}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM: hjubah}(h]h ]h"]h$]h&]uh1jhjɀubeh}(h]h ]h"]h$]h&]uh1jhjhM; hjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'copy_siginfo_to_external32 (C function)c.copy_siginfo_to_external32hNtauh1hhj]hhhNhNubh)}(hhh](h)}(h^void copy_siginfo_to_external32 (struct compat_siginfo *to, const struct kernel_siginfo *from)h]h)}(h]void copy_siginfo_to_external32(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hM ubh)}(hcopy_siginfo_to_external32h]h)}(hcopy_siginfo_to_external32h]hcopy_siginfo_to_external32}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hM ubj )}(h>(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j&)}(hstruct compat_siginfo *toh](j+)}(hj.h]hstruct}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubh)}(hhh]h)}(hcompat_siginfoh]hcompat_siginfo}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.copy_siginfo_to_external32asbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(htoh]hto}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(h!const struct kernel_siginfo *fromh](j+)}(hj<*h]hconst}(hj؁hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjԁubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjԁubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjԁubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjԁubh)}(hhh]h)}(hkernel_siginfoh]hkernel_siginfo}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.copy_siginfo_to_external32asbuh1hhjԁubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjԁubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԁubh)}(hfromh]hfrom}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԁubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hM hjhhubj )}(hhh]j9)}(h0copy a kernel siginfo into a compat user siginfoh]h0copy a kernel siginfo into a compat user siginfo}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct compat_siginfo *to`` compat siginfo destination ``const struct kernel_siginfo *from`` kernel siginfo source **Note** This function does not work properly for the SIGCHLD on x32, but fortunately it doesn't have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj)}(hhh](j)}(h9``struct compat_siginfo *to`` compat siginfo destination h](j)}(h``struct compat_siginfo *to``h]j?)}(hjh]hstruct compat_siginfo *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj)}(hhh]j9)}(hcompat siginfo destinationh]hcompat siginfo destination}(hj΂hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjʂhM hj˂ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʂhM hjubj)}(h<``const struct kernel_siginfo *from`` kernel siginfo source h](j)}(h%``const struct kernel_siginfo *from``h]j?)}(hjh]h!const struct kernel_siginfo *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj)}(hhh]j9)}(hkernel siginfo sourceh]hkernel siginfo source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Note**h]jz)}(hj)h]hNote}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubj9)}(hXThis function does not work properly for the SIGCHLD on x32, but fortunately it doesn't have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.h]hX This function does not work properly for the SIGCHLD on x32, but fortunately it doesn’t have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdo_sigtimedwait (C function)c.do_sigtimedwaithNtauh1hhj]hhhNhNubh)}(hhh](h)}(h`int do_sigtimedwait (const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h]h)}(h_int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjhhhj|hMubh)}(hdo_sigtimedwaith]h)}(hdo_sigtimedwaith]hdo_sigtimedwait}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhj|hMubj )}(hL(const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h](j&)}(hconst sigset_t *whichh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hsigset_th]hsigset_t}(hjɃhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƃubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj˃modnameN classnameNjcjf)}ji]jl)}j_jsbc.do_sigtimedwaitasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hwhichh]hwhich}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hkernel_siginfo_t *infoh](h)}(hhh]h)}(hkernel_siginfo_th]hkernel_siginfo_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jc.do_sigtimedwaitasbuh1hhjubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hinfoh]hinfo}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst struct timespec64 *tsh](j+)}(hj<*h]hconst}(hjrhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjnubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubh)}(hhh]h)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.do_sigtimedwaitasbuh1hhjnubj=)}(h h]h }(hjɄhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubj)}(hjh]h*}(hjׄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(htsh]hts}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjfhhhj|hMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhj|hMhjchhubj )}(hhh]j9)}(h.wait for queued signals specified in **which**h](h%wait for queued signals specified in }(hjhhhNhNubjz)}(h **which**h]hwhich}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``const sigset_t *which`` queued signals to wait for ``kernel_siginfo_t *info`` if non-null, the signal's siginfo is returned here ``const struct timespec64 *ts`` upper bound on process time suspensionh](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj8ubj)}(hhh](j)}(h5``const sigset_t *which`` queued signals to wait for h](j)}(h``const sigset_t *which``h]j?)}(hj]h]hconst sigset_t *which}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubj)}(hhh]j9)}(hqueued signals to wait forh]hqueued signals to wait for}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(hN``kernel_siginfo_t *info`` if non-null, the signal's siginfo is returned here h](j)}(h``kernel_siginfo_t *info``h]j?)}(hjh]hkernel_siginfo_t *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(hF``const struct timespec64 *ts`` upper bound on process time suspensionh](j)}(h``const struct timespec64 *ts``h]j?)}(hjυh]hconst struct timespec64 *ts}(hjхhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjͅubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjɅubj)}(hhh]j9)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjɅubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_rt_sigtimedwait (C function)c.sys_rt_sigtimedwaithNtauh1hhj]hhhNhNubh)}(hhh](h)}(hlong sys_rt_sigtimedwait (const sigset_t __user * uthese, siginfo_t __user * uinfo, const struct __kernel_timespec __user * uts, size_t sigsetsize)h]h)}(hlong sys_rt_sigtimedwait(const sigset_t __user *uthese, siginfo_t __user *uinfo, const struct __kernel_timespec __user *uts, size_t sigsetsize)h](j)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hMubh)}(hsys_rt_sigtimedwaith]h)}(hsys_rt_sigtimedwaith]hsys_rt_sigtimedwait}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(hw(const sigset_t __user *uthese, siginfo_t __user *uinfo, const struct __kernel_timespec __user *uts, size_t sigsetsize)h](j&)}(hconst sigset_t __user *utheseh](j+)}(hj<*h]hconst}(hjfhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjbubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubh)}(hhh]h)}(hsigset_th]hsigset_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.sys_rt_sigtimedwaitasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubh__user}(hjbhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjĆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hutheseh]huthese}(hjцhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hsiginfo_t __user *uinfoh](h)}(hhh]h)}(h siginfo_th]h siginfo_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.sys_rt_sigtimedwaitasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(huinfoh]huinfo}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(h*const struct __kernel_timespec __user *utsh](j+)}(hj<*h]hconst}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj+)}(hj.h]hstruct}(hjlhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjMubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hhh]h)}(h__kernel_timespech]h__kernel_timespec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.sys_rt_sigtimedwaitasbuh1hhjMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh__user}(hjMhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hjh]h*}(hjȇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hutsh]huts}(hjՇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.sys_rt_sigtimedwaitasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(h sigsetsizeh]h sigsetsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(h=synchronously wait for queued signals specified in **uthese**h](h3synchronously wait for queued signals specified in }(hjGhhhNhNubjz)}(h **uthese**h]huthese}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj]hNhNubjp)}(hX+**Parameters** ``const sigset_t __user * uthese`` queued signals to wait for ``siginfo_t __user * uinfo`` if non-null, the signal's siginfo is returned here ``const struct __kernel_timespec __user * uts`` upper bound on process time suspension ``size_t sigsetsize`` size of sigset_t typeh](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjqubj)}(hhh](j)}(h>``const sigset_t __user * uthese`` queued signals to wait for h](j)}(h"``const sigset_t __user * uthese``h]j?)}(hjh]hconst sigset_t __user * uthese}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(hqueued signals to wait forh]hqueued signals to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hP``siginfo_t __user * uinfo`` if non-null, the signal's siginfo is returned here h](j)}(h``siginfo_t __user * uinfo``h]j?)}(hjψh]hsiginfo_t __user * uinfo}(hjшhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj͈ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjɈubj)}(hhh]j9)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɈubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hW``const struct __kernel_timespec __user * uts`` upper bound on process time suspension h](j)}(h/``const struct __kernel_timespec __user * uts``h]j?)}(hjh]h+const struct __kernel_timespec __user * uts}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j?)}(hjAh]hsize_t sigsetsize}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj;ubj)}(hhh]j9)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_kill (C function) c.sys_killhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h"long sys_kill (pid_t pid, int sig)h]h)}(h!long sys_kill(pid_t pid, int sig)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMgubh)}(hsys_killh]h)}(hsys_killh]hsys_kill}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMgubj )}(h(pid_t pid, int sig)h](j&)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hjۉhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj؉ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj݉modnameN classnameNjcjf)}ji]jl)}j_jsb c.sys_killasbuh1hhjԉubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjԉubh)}(hpidh]hpid}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԉubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjЉubj&)}(hint sigh](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsigh]hsig}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjЉubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMghjhhubj )}(hhh]j9)}(hsend a signal to a processh]hsend a signal to a process}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMghjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMgubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hW**Parameters** ``pid_t pid`` the PID of the process ``int sig`` signal to be senth](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMkhjubj)}(hhh](j)}(h%``pid_t pid`` the PID of the process h](j)}(h ``pid_t pid``h]j?)}(hjh]h pid_t pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhhjubj)}(hhh]j9)}(hthe PID of the processh]hthe PID of the process}(hjŠhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h``int sig`` signal to be senth](j)}(h ``int sig``h]j?)}(hjh]hint sig}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMjhj܊ubj)}(hhh]j9)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMihjubah}(h]h ]h"]h$]h&]uh1jhj܊ubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"sys_pidfd_send_signal (C function)c.sys_pidfd_send_signalhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h\long sys_pidfd_send_signal (int pidfd, int sig, siginfo_t __user * info, unsigned int flags)h]h)}(hZlong sys_pidfd_send_signal(int pidfd, int sig, siginfo_t __user *info, unsigned int flags)h](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8hhhjJhMubh)}(hsys_pidfd_send_signalh]h)}(hsys_pidfd_send_signalh]hsys_pidfd_send_signal}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjJhMubj )}(h@(int pidfd, int sig, siginfo_t __user *info, unsigned int flags)h](j&)}(h int pidfdh](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubh)}(hpidfdh]hpidfd}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(hint sigh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsigh]hsig}(hjʋhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(hsiginfo_t __user *infoh](h)}(hhh]h)}(h siginfo_th]h siginfo_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j_sbc.sys_pidfd_send_signalasbuh1hhjߋubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjߋubh__user}(hjߋhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjߋubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߋubh)}(hinfoh]hinfo}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjߋubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubj)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjJhMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhj1hhubj )}(hhh]j9)}(h Signal a process through a pidfdh]h Signal a process through a pidfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jƌj4jƌj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``int pidfd`` file descriptor of the process ``int sig`` signal to send ``siginfo_t __user * info`` signal info ``unsigned int flags`` future flags **Description** Send the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to **flags** may be used to override the default scope of **pidfd**. **Return** 0 on success, negative errno on failureh](j9)}(h**Parameters**h]jz)}(hjЌh]h Parameters}(hjҌhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΌubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʌubj)}(hhh](j)}(h-``int pidfd`` file descriptor of the process h](j)}(h ``int pidfd``h]j?)}(hjh]h int pidfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(hfile descriptor of the processh]hfile descriptor of the process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int sig`` signal to send h](j)}(h ``int sig``h]j?)}(hj(h]hint sig}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj"ubj)}(hhh]j9)}(hsignal to sendh]hsignal to send}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h(``siginfo_t __user * info`` signal info h](j)}(h``siginfo_t __user * info``h]j?)}(hjah]hsiginfo_t __user * info}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj[ubj)}(hhh]j9)}(h signal infoh]h signal info}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h$``unsigned int flags`` future flags h](j)}(h``unsigned int flags``h]j?)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h future flagsh]h future flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjʌubj9)}(h**Description**h]jz)}(hjՍh]h Description}(hj׍hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӍubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʌubj9)}(hSend the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to **flags** may be used to override the default scope of **pidfd**.h](hvSend the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to }(hjhhhNhNubjz)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. may be used to override the default scope of }(hjhhhNhNubjz)}(h **pidfd**h]hpidfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʌubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʌubj9)}(h'0 on success, negative errno on failureh]h'0 on success, negative errno on failure}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjʌubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_tgkill (C function) c.sys_tgkillhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h0long sys_tgkill (pid_t tgid, pid_t pid, int sig)h]h)}(h/long sys_tgkill(pid_t tgid, pid_t pid, int sig)h](j)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM<ubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjshM<ubh)}(h sys_tgkillh]h)}(h sys_tgkillh]h sys_tgkill}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjshM<ubj )}(h (pid_t tgid, pid_t pid, int sig)h](j&)}(h pid_t tgidh](h)}(hhh]h)}(hpid_th]hpid_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.sys_tgkillasbuh1hhjubj=)}(h h]h }(hjŎhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(htgidh]htgid}(hjӎhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.sys_tgkillasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint sigh](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0ubh)}(hsigh]hsig}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjshM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhjshM<ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjshM<hjZhhubj )}(hhh]j9)}(h"send signal to one specific threadh]h"send signal to one specific thread}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM<hjwhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshM<ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hXp**Parameters** ``pid_t tgid`` the thread group ID of the thread ``pid_t pid`` the PID of the thread ``int sig`` signal to be sent **Description** This syscall also checks the **tgid** and returns -ESRCH even if the PID exists but it's not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hjubj)}(hhh](j)}(h1``pid_t tgid`` the thread group ID of the thread h](j)}(h``pid_t tgid``h]j?)}(hjh]h pid_t tgid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM=hjubj)}(hhh]j9)}(h!the thread group ID of the threadh]h!the thread group ID of the thread}(hjԏhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjЏhM=hjяubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЏhM=hjubj)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]j?)}(hjh]h pid_t pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>hjubj)}(hhh]j9)}(hthe PID of the threadh]hthe PID of the thread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM>hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM>hjubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]j?)}(hj-h]hint sig}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hj'ubj)}(hhh]j9)}(hsignal to be senth]hsignal to be sent}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhM?hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMAhjubjU)}(hThis syscall also checks the **tgid** and returns -ESRCH even if the PID exists but it's not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.h]j9)}(hThis syscall also checks the **tgid** and returns -ESRCH even if the PID exists but it's not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.h](hThis syscall also checks the }(hjhhhNhNubjz)}(h**tgid**h]htgid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and returns -ESRCH even if the PID exists but it’s not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hj~ubah}(h]h ]h"]h$]h&]uh1jThjhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_tkill (C function) c.sys_tkillhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h#long sys_tkill (pid_t pid, int sig)h]h)}(h"long sys_tkill(pid_t pid, int sig)h](j)}(hlongh]hlong}(hjɐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŐhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMOubj=)}(h h]h }(hjؐhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjŐhhhjאhMOubh)}(h sys_tkillh]h)}(h sys_tkillh]h sys_tkill}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjŐhhhjאhMOubj )}(h(pid_t pid, int sig)h](j&)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsb c.sys_tkillasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hpidh]hpid}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint sigh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hsigh]hsig}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjŐhhhjאhMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjאhMOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjאhMOhjhhubj )}(hhh]j9)}(h send signal to one specific taskh]h send signal to one specific task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjאhMOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``pid_t pid`` the PID of the task ``int sig`` signal to be sent **Description** Send a signal to only one task, even if it's a CLONE_THREAD task.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMShjubj)}(hhh](j)}(h"``pid_t pid`` the PID of the task h](j)}(h ``pid_t pid``h]j?)}(hjבh]h pid_t pid}(hjّhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjՑubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMPhjёubj)}(hhh]j9)}(hthe PID of the taskh]hthe PID of the task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjёubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjΑubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]j?)}(hjh]hint sig}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMQhj ubj)}(hhh]j9)}(hsignal to be senth]hsignal to be sent}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMQhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMQhjΑubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMShjubjU)}(hASend a signal to only one task, even if it's a CLONE_THREAD task.h]j9)}(hjch]hCSend a signal to only one task, even if it’s a CLONE_THREAD task.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMRhjaubah}(h]h ]h"]h$]h&]uh1jThjrhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sys_rt_sigqueueinfo (C function)c.sys_rt_sigqueueinfohNtauh1hhj]hhhNhNubh)}(hhh](h)}(hGlong sys_rt_sigqueueinfo (pid_t pid, int sig, siginfo_t __user * uinfo)h]h)}(hElong sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMlubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMlubh)}(hsys_rt_sigqueueinfoh]h)}(hsys_rt_sigqueueinfoh]hsys_rt_sigqueueinfo}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMlubj )}(h-(pid_t pid, int sig, siginfo_t __user *uinfo)h](j&)}(h pid_t pidh](h)}(hhh]h)}(hpid_th]hpid_t}(hjْhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֒ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjےmodnameN classnameNjcjf)}ji]jl)}j_jsbc.sys_rt_sigqueueinfoasbuh1hhjҒubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjҒubh)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjҒubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjΒubj&)}(hint sigh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsigh]hsig}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjΒubj&)}(hsiginfo_t __user *uinfoh](h)}(hhh]h)}(h siginfo_th]h siginfo_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jc.sys_rt_sigqueueinfoasbuh1hhjQubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh__user}(hjQhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(huinfoh]huinfo}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjΒubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMlubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMlhjhhubj )}(hhh]j9)}(h#send signal information to a signalh]h#send signal information to a signal}(hj͓hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMlhjʓhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``pid_t pid`` the PID of the thread ``int sig`` signal to be sent ``siginfo_t __user * uinfo`` signal info to be senth](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMphjubj)}(hhh](j)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]j?)}(hjh]h pid_t pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMmhjubj)}(hhh]j9)}(hthe PID of the threadh]hthe PID of the thread}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMmhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMmhjubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]j?)}(hjGh]hint sig}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMnhjAubj)}(hhh]j9)}(hsignal to be senth]hsignal to be sent}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMnhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMnhjubj)}(h3``siginfo_t __user * uinfo`` signal info to be senth](j)}(h``siginfo_t __user * uinfo``h]j?)}(hjh]hsiginfo_t __user * uinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMphjzubj)}(hhh]j9)}(hsignal info to be senth]hsignal info to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMohjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_sigpending (C function)c.sys_sigpendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h0long sys_sigpending (old_sigset_t __user * uset)h]h)}(h.long sys_sigpending(old_sigset_t __user *uset)h](j)}(hlongh]hlong}(hjڔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֔hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj֔hhhjhMubh)}(hsys_sigpendingh]h)}(hsys_sigpendingh]hsys_sigpending}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj֔hhhjhMubj )}(h(old_sigset_t __user *uset)h]j&)}(hold_sigset_t __user *useth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.sys_sigpendingasbuh1hhjubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(huseth]huset}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj֔hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjҔhhhjhMubah}(h]j͔ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjϔhhubj )}(hhh]j9)}(hexamine pending signalsh]hexamine pending signals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjϔhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hY**Parameters** ``old_sigset_t __user * uset`` where mask of pending signal is returnedh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j)}(hG``old_sigset_t __user * uset`` where mask of pending signal is returnedh](j)}(h``old_sigset_t __user * uset``h]j?)}(hjҕh]hold_sigset_t __user * uset}(hjԕhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjЕubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj̕ubj)}(hhh]j9)}(h(where mask of pending signal is returnedh]h(where mask of pending signal is returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhj̕ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_sigprocmask (C function)c.sys_sigprocmaskhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hVlong sys_sigprocmask (int how, old_sigset_t __user * nset, old_sigset_t __user * oset)h]h)}(hSlong sys_sigprocmask(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(hhhj:hMubh)}(hsys_sigprocmaskh]h)}(hsys_sigprocmaskh]hsys_sigprocmask}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj:hMubj )}(h?(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j&)}(hint howh](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hhowh]hhow}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(hold_sigset_t __user *nseth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jOsbc.sys_sigprocmaskasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjӖhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnseth]hnset}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(hold_sigset_t __user *oseth](h)}(hhh]h)}(h old_sigset_th]h old_sigset_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.sys_sigprocmaskasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoseth]hoset}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj:hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj:hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj:hMhj!hhubj )}(hhh]j9)}(h"examine and change blocked signalsh]h"examine and change blocked signals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hXQ**Parameters** ``int how`` whether to add, remove, or set signals ``old_sigset_t __user * nset`` signals to add or remove (if non-null) ``old_sigset_t __user * oset`` previous value of signal mask if non-null **Description** Some platforms have their own version with special arguments; others support only sys_rt_sigprocmask.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]j?)}(hjh]hint how}(hj—hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjٗhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj՗hMhj֗ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj՗hMhjubj)}(hF``old_sigset_t __user * nset`` signals to add or remove (if non-null) h](j)}(h``old_sigset_t __user * nset``h]j?)}(hjh]hold_sigset_t __user * nset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h&signals to add or remove (if non-null)h]h&signals to add or remove (if non-null)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``old_sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``old_sigset_t __user * oset``h]j?)}(hj2h]hold_sigset_t __user * oset}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj,ubj)}(hhh]j9)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj9)}(heSome platforms have their own version with special arguments; others support only sys_rt_sigprocmask.h]heSome platforms have their own version with special arguments; others support only sys_rt_sigprocmask.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigaction (C function)c.sys_rt_sigactionhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hwlong sys_rt_sigaction (int sig, const struct sigaction __user * act, struct sigaction __user * oact, size_t sigsetsize)h]h)}(htlong sys_rt_sigaction(int sig, const struct sigaction __user *act, struct sigaction __user *oact, size_t sigsetsize)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hsys_rt_sigactionh]h)}(hsys_rt_sigactionh]hsys_rt_sigaction}(hjӘhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϘubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h_(int sig, const struct sigaction __user *act, struct sigaction __user *oact, size_t sigsetsize)h](j&)}(hint sigh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsigh]hsig}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h"const struct sigaction __user *acth](j+)}(hj<*h]hconst}(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj+)}(hj.h]hstruct}(hj?hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(h sigactionh]h sigaction}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj_modnameN classnameNjcjf)}ji]jl)}j_j՘sbc.sys_rt_sigactionasbuh1hhj ubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh__user}(hj hhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hacth]hact}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct sigaction __user *oacth](j+)}(hj.h]hstruct}(hjÙhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjЙhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h sigactionh]h sigaction}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޙubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jyc.sys_rt_sigactionasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hoacth]hoact}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jyc.sys_rt_sigactionasbuh1hhjAubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(h sigsetsizeh]h sigsetsize}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h"alter an action taken by a processh]h"alter an action taken by a process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``int sig`` signal to be sent ``const struct sigaction __user * act`` new sigaction ``struct sigaction __user * oact`` used to save the previous sigaction ``size_t sigsetsize`` size of sigset_t typeh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjšhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]j?)}(hjߚh]hint sig}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjݚubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjٚubj)}(hhh]j9)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjٚubeh}(h]h ]h"]h$]h&]uh1jhjhMhj֚ubj)}(h6``const struct sigaction __user * act`` new sigaction h](j)}(h'``const struct sigaction __user * act``h]j?)}(hjh]h#const struct sigaction __user * act}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(h new sigactionh]h new sigaction}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj֚ubj)}(hG``struct sigaction __user * oact`` used to save the previous sigaction h](j)}(h"``struct sigaction __user * oact``h]j?)}(hjQh]hstruct sigaction __user * oact}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjKubj)}(hhh]j9)}(h#used to save the previous sigactionh]h#used to save the previous sigaction}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhj֚ubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j?)}(hjh]hsize_t sigsetsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]j9)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj֚ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsys_rt_sigsuspend (C function)c.sys_rt_sigsuspendhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hElong sys_rt_sigsuspend (sigset_t __user * unewset, size_t sigsetsize)h]h)}(hClong sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hsys_rt_sigsuspendh]h)}(hsys_rt_sigsuspendh]hsys_rt_sigsuspend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h-(sigset_t __user *unewset, size_t sigsetsize)h](j&)}(hsigset_t __user *unewseth](h)}(hhh]h)}(hsigset_th]hsigset_t}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jl)}j_jsbc.sys_rt_sigsuspendasbuh1hhjubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh__user}(hjhhhNhNubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hunewseth]hunewset}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hsize_t sigsetsizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j@c.sys_rt_sigsuspendasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(h sigsetsizeh]h sigsetsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjܛhhhjhMubah}(h]jכah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjٛhhubj )}(hhh]j9)}(hYreplace the signal mask for a value with the **unewset** value until a signal is receivedh](h-replace the signal mask for a value with the }(hjhhhNhNubjz)}(h **unewset**h]hunewset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh! value until a signal is received}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjٛhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj]hNhNubjp)}(ht**Parameters** ``sigset_t __user * unewset`` new signal mask value ``size_t sigsetsize`` size of sigset_t typeh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh](j)}(h4``sigset_t __user * unewset`` new signal mask value h](j)}(h``sigset_t __user * unewset``h]j?)}(hj6h]hsigset_t __user * unewset}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj0ubj)}(hhh]j9)}(hnew signal mask valueh]hnew signal mask value}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h+``size_t sigsetsize`` size of sigset_t typeh](j)}(h``size_t sigsetsize``h]j?)}(hjoh]hsize_t sigsetsize}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjiubj)}(hhh]j9)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_create (C macro)c.kthread_createhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hkthread_createh]h)}(hkthread_createh]h)}(hkthread_createh]h)}(hjÝh]hkthread_create}(hj͝hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɝubah}(h]h ](jjeh"]h$]h&]jj uh1hhjŝhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK#ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK#hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK#ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubj9)}(h4``kthread_create (threadfn, data, namefmt, arg...)``h]j?)}(hjh]h0kthread_create (threadfn, data, namefmt, arg...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK%hj]hhubjU)}(h%create a kthread on the current node h]j9)}(h$create a kthread on the current nodeh]h$create a kthread on the current node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK#hjubah}(h]h ]h"]h$]h&]uh1jThj'hK#hj]hhubjp)}(hX**Parameters** ``threadfn`` the function to run in the thread ``data`` data pointer for **threadfn\(\)** ``namefmt`` printf-style format string for the thread name ``arg...`` arguments for **namefmt**. **Description** This macro will create a kthread on the current node, leaving it in the stopped state. This is just a helper for kthread_create_on_node(); see the documentation there for more details.h](j9)}(h**Parameters**h]jz)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK'hj.ubj)}(hhh](j)}(h/``threadfn`` the function to run in the thread h](j)}(h ``threadfn``h]j?)}(hjSh]hthreadfn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK$hjMubj)}(hhh]j9)}(h!the function to run in the threadh]h!the function to run in the thread}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhK$hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhK$hjJubj)}(h+``data`` data pointer for **threadfn\(\)** h](j)}(h``data``h]j?)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK%hjubj)}(hhh]j9)}(h!data pointer for **threadfn\(\)**h](hdata pointer for }(hjhhhNhNubjz)}(h**threadfn\(\)**h]h threadfn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8hjhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjJubj)}(h;``namefmt`` printf-style format string for the thread name h](j)}(h ``namefmt``h]j?)}(hjӞh]hnamefmt}(hj՞hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjўubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK&hj͞ubj)}(hhh]j9)}(h.printf-style format string for the thread nameh]h.printf-style format string for the thread name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK&hjubah}(h]h ]h"]h$]h&]uh1jhj͞ubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjJubj)}(h&``arg...`` arguments for **namefmt**. h](j)}(h ``arg...``h]j?)}(hj h]harg...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK'hjubj)}(hhh]j9)}(harguments for **namefmt**.h](harguments for }(hj%hhhNhNubjz)}(h **namefmt**h]hnamefmt}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj!hK'hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hK'hjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK)hj.ubj9)}(hThis macro will create a kthread on the current node, leaving it in the stopped state. This is just a helper for kthread_create_on_node(); see the documentation there for more details.h]hThis macro will create a kthread on the current node, leaving it in the stopped state. This is just a helper for kthread_create_on_node(); see the documentation there for more details.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK(hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_run (C macro) c.kthread_runhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h kthread_runh]h)}(h kthread_runh]h)}(h kthread_runh]h)}(hjh]h kthread_run}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK=ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK=hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK=ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jΟj4jΟj5j6j7uh1hhhhj]hNhNubj9)}(h.``kthread_run (threadfn, data, namefmt, ...)``h]j?)}(hjԟh]h*kthread_run (threadfn, data, namefmt, ...)}(hj֟hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjҟubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK?hj]hhubjU)}(hcreate and wake a thread. h]j9)}(hcreate and wake a thread.h]hcreate and wake a thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=hjubah}(h]h ]h"]h$]h&]uh1jThjhK=hj]hhubjp)}(hXJ**Parameters** ``threadfn`` the function to run until signal_pending(current). ``data`` data ptr for **threadfn**. ``namefmt`` printf-style name for the thread. ``...`` variable arguments **Description** Convenient wrapper for kthread_create() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKAhjubj)}(hhh](j)}(h@``threadfn`` the function to run until signal_pending(current). h](j)}(h ``threadfn``h]j?)}(hj(h]hthreadfn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK>hj"ubj)}(hhh]j9)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hK>hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hK>hjubj)}(h$``data`` data ptr for **threadfn**. h](j)}(h``data``h]j?)}(hjah]hdata}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK?hj[ubj)}(hhh]j9)}(hdata ptr for **threadfn**.h](h data ptr for }(hjzhhhNhNubjz)}(h **threadfn**h]hthreadfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjvhK?hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhK?hjubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]j?)}(hjh]hnamefmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK@hjubj)}(hhh]j9)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjŠhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK@hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK@hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjߠubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjߠubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj9)}(hpConvenient wrapper for kthread_create() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).h]hpConvenient wrapper for kthread_create() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_run_on_cpu (C function)c.kthread_run_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hxstruct task_struct * kthread_run_on_cpu (int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h]h)}(hvstruct task_struct *kthread_run_on_cpu(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j+)}(hj.h]hstruct}(hjehhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjahhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKOubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjrhKOubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kthread_run_on_cpusbc.kthread_run_on_cpuasbuh1hhjahhhjrhKOubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjrhKOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjrhKOubh)}(hkthread_run_on_cpuh]h)}(hjh]hkthread_run_on_cpu}(hjġhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjrhKOubj )}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j&)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hjߡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjۡubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubh)}(hthreadfnh]hthreadfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۡubj)}(hjh]h)}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubj)}(hj6h]h(}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubj)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjۡubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubh)}(hdatah]hdata}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۡubj)}(hjh]h)}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۡubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjסubj&)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjסubj&)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hj΢hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʢubj=)}(h h]h }(hjܢhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʢubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʢubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʢubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʢubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjסubj&)}(hconst char *namefmth](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnamefmth]hnamefmt}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjסubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjrhKOubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhjrhKOubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjrhKOhjZhhubj )}(hhh]j9)}(h#create and wake a cpu bound thread.h]h#create and wake a cpu bound thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKOhjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjrhKOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``int (*threadfn)(void *data)`` the function to run until signal_pending(current). ``void *data`` data ptr for **threadfn**. ``unsigned int cpu`` The cpu on which the thread should be bound, ``const char *namefmt`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** Convenient wrapper for kthread_create_on_cpu() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKShjubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]j?)}(hjΣh]hint (*threadfn)(void *data)}(hjУhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj̣ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKPhjȣubj)}(hhh]j9)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKPhjubah}(h]h ]h"]h$]h&]uh1jhjȣubeh}(h]h ]h"]h$]h&]uh1jhjhKPhjţubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j?)}(hjh]h void *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKQhjubj)}(hhh]j9)}(hdata ptr for **threadfn**.h](h data ptr for }(hj hhhNhNubjz)}(h **threadfn**h]hthreadfn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKQhjţubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]j?)}(hjRh]hunsigned int cpu}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKRhjLubj)}(hhh]j9)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjghKRhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKRhjţubj)}(h{``const char *namefmt`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. h](j)}(h``const char *namefmt``h]j?)}(hjh]hconst char *namefmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKThjubj)}(hhh]j9)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKThjţubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjǤh]h Description}(hjɤhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŤubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKVhjubj9)}(hwConvenient wrapper for kthread_create_on_cpu() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).h]hwConvenient wrapper for kthread_create_on_cpu() followed by wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).}(hjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_run_worker (C macro)c.kthread_run_workerhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hkthread_run_workerh]h)}(hkthread_run_workerh]h)}(hkthread_run_workerh]h)}(hjh]hkthread_run_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj#hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj#hKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj#hKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj]hNhNubj9)}(h,``kthread_run_worker (flags, namefmt, ...)``h]j?)}(hjBh]h(kthread_run_worker (flags, namefmt, ...)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj]hhubjU)}(h"create and wake a kthread worker. h]j9)}(h!create and wake a kthread worker.h]h!create and wake a kthread worker.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjXubah}(h]h ]h"]h$]h&]uh1jThjjhKhj]hhubjp)}(hX.**Parameters** ``flags`` flags modifying the default behavior of the worker ``namefmt`` printf-style name for the thread. ``...`` variable arguments **Description** Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h](j9)}(h**Parameters**h]jz)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjqubj)}(hhh](j)}(h=``flags`` flags modifying the default behavior of the worker h](j)}(h ``flags``h]j?)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh]j9)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]j?)}(hjϥh]hnamefmt}(hjѥhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjͥubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjɥubj)}(hhh]j9)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjɥubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjh]h...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjqubj9)}(h~Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h]h~Convenient wrapper for kthread_create_worker() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&kthread_run_worker_on_cpu (C function)c.kthread_run_worker_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hestruct kthread_worker * kthread_run_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hcstruct kthread_worker *kthread_run_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kthread_run_worker_on_cpusbc.kthread_run_worker_on_cpuasbuh1hhjhhhjhKubj=)}(h h]h }(hjȦhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubj)}(hjh]h*}(hj֦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hkthread_run_worker_on_cpuh]h)}(hjŦh]hkthread_run_worker_on_cpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h3(int cpu, unsigned int flags, const char namefmt[])h](j&)}(hint cpuh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubh)}(hflagsh]hflags}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst char namefmt[]h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(h[h]h[}(hjͧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h]h]h]}(hjۧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhjhKhj}hhubj )}(hhh]j9)}(h+create and wake a cpu bound kthread worker.h]h+create and wake a cpu bound kthread worker.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``int cpu`` CPU number ``unsigned int flags`` flags modifying the default behavior of the worker ``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** Convenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj!ubj)}(hhh](j)}(h``int cpu`` CPU number h](j)}(h ``int cpu``h]j?)}(hjFh]hint cpu}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj@ubj)}(hhh]j9)}(h CPU numberh]h CPU number}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj=ubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]j?)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjyubj)}(hhh]j9)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhKhj=ubj)}(h|``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. h](j)}(h``const char namefmt[]``h]j?)}(hjh]hconst char namefmt[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjubj)}(hhh]j9)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hjѨhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjΨubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͨhKhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj!ubj9)}(hConvenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).h]hConvenient wrapper for kthread_create_worker_on_cpu() followed by wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kthread_should_stop (C function)c.kthread_should_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool kthread_should_stop (void)h]h)}(hbool kthread_should_stop(void)h](j)}(hjh]hbool}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhjFhKubh)}(hkthread_should_stoph]h)}(hkthread_should_stoph]hkthread_should_stop}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhjFhKubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubah}(h]h ]h"]h$]h&]jj uh1jhj5hhhjFhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhjFhKubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhjFhKhj.hhubj )}(hhh]j9)}(hshould this kthread return now?h]hshould this kthread return now?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjFhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``void`` no arguments **Description** When someone calls kthread_stop() on your kthread, it will be woken and this will return true. You should then return, and your return value will be passed through to kthread_stop().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjéhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjީubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjکubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjکubeh}(h]h ]h"]h$]h&]uh1jhjhKhjשubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj9)}(hWhen someone calls kthread_stop() on your kthread, it will be woken and this will return true. You should then return, and your return value will be passed through to kthread_stop().h]hWhen someone calls kthread_stop() on your kthread, it will be woken and this will return true. You should then return, and your return value will be passed through to kthread_stop().}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kthread_should_park (C function)c.kthread_should_parkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool kthread_should_park (void)h]h)}(hbool kthread_should_park(void)h](j)}(hjh]hbool}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\hhhjmhKubh)}(hkthread_should_parkh]h)}(hkthread_should_parkh]hkthread_should_park}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjmhKubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj\hhhjmhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjmhKubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjmhKhjUhhubj )}(hhh]j9)}(hshould this kthread park now?h]hshould this kthread park now?}(hjƪhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjêhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjmhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jުj4jުj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``void`` no arguments **Description** When someone calls kthread_park() on your kthread, it will be woken and this will return true. You should then do the necessary cleanup and call kthread_parkme() Similar to kthread_should_stop(), but this keeps the thread alive and in a park position. kthread_unpark() "restarts" the thread and calls the thread function again.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj9)}(hWhen someone calls kthread_park() on your kthread, it will be woken and this will return true. You should then do the necessary cleanup and call kthread_parkme()h]hWhen someone calls kthread_park() on your kthread, it will be woken and this will return true. You should then do the necessary cleanup and call kthread_parkme()}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj9)}(hSimilar to kthread_should_stop(), but this keeps the thread alive and in a park position. kthread_unpark() "restarts" the thread and calls the thread function again.h]hSimilar to kthread_should_stop(), but this keeps the thread alive and in a park position. kthread_unpark() “restarts” the thread and calls the thread function again.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*kthread_freezable_should_stop (C function)c.kthread_freezable_should_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h5bool kthread_freezable_should_stop (bool *was_frozen)h]h)}(h4bool kthread_freezable_should_stop(bool *was_frozen)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hkthread_freezable_should_stoph]h)}(hkthread_freezable_should_stoph]hkthread_freezable_should_stop}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(bool *was_frozen)h]j&)}(hbool *was_frozenh](j)}(hjh]hbool}(hjҫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΫubj=)}(h h]h }(hj߫hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjΫubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΫubh)}(h was_frozenh]h was_frozen}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΫubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjʫubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h)should this freezable kthread return now?h]h)should this freezable kthread return now?}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj]hNhNubjp)}(hXn**Parameters** ``bool *was_frozen`` optional out parameter, indicates whether ``current`` was frozen **Description** kthread_should_stop() for freezable kthreads, which will enter refrigerator if necessary. This function is safe from kthread_stop() / freezer deadlock and freezable kthreads should use this function instead of calling try_to_freeze() directly.h](j9)}(h**Parameters**h]jz)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj@ubj)}(hhh]j)}(hV``bool *was_frozen`` optional out parameter, indicates whether ``current`` was frozen h](j)}(h``bool *was_frozen``h]j?)}(hjeh]hbool *was_frozen}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj_ubj)}(hhh]j9)}(h@optional out parameter, indicates whether ``current`` was frozenh](h*optional out parameter, indicates whether }(hj~hhhNhNubj?)}(h ``current``h]hcurrent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubh was frozen}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj@ubj9)}(hkthread_should_stop() for freezable kthreads, which will enter refrigerator if necessary. This function is safe from kthread_stop() / freezer deadlock and freezable kthreads should use this function instead of calling try_to_freeze() directly.h]hkthread_should_stop() for freezable kthreads, which will enter refrigerator if necessary. This function is safe from kthread_stop() / freezer deadlock and freezable kthreads should use this function instead of calling try_to_freeze() directly.}(hjȬhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_func (C function)c.kthread_funchNtauh1hhj]hhhNhNubh)}(hhh](h)}(h.void * kthread_func (struct task_struct *task)h]h)}(h,void *kthread_func(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(h kthread_funch]h)}(h kthread_funch]h kthread_func}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct task_struct *task)h]j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjAhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj=ubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubh)}(hhh]h)}(h task_structh]h task_struct}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjamodnameN classnameNjcjf)}ji]jl)}j_j'sbc.kthread_funcasbuh1hhj=ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(htaskh]htask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h1return the function specified on kthread creationh]h1return the function specified on kthread creation}(hjĭhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jܭj4jܭj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct task_struct *task`` kthread task in question **Description** Returns NULL if the task is not a kthread.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j)}(h6``struct task_struct *task`` kthread task in question h](j)}(h``struct task_struct *task``h]j?)}(hjh]hstruct task_struct *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j9)}(hkthread task in questionh]hkthread task in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj9)}(h*Returns NULL if the task is not a kthread.h]h*Returns NULL if the task is not a kthread.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_data (C function)c.kthread_datahNtauh1hhj]hhhNhNubh)}(hhh](h)}(h.void * kthread_data (struct task_struct *task)h]h)}(h,void *kthread_data(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(h kthread_datah]h)}(h kthread_datah]h kthread_data}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct task_struct *task)h]j&)}(hstruct task_struct *taskh](j+)}(hj.h]hstruct}(hjϮhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjˮubj=)}(h h]h }(hjܮhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjˮubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_dataasbuh1hhjˮubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjˮubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˮubh)}(htaskh]htask}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjˮubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjǮubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhKubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjzhhubj )}(hhh]j9)}(h/return data value specified on kthread creationh]h/return data value specified on kthread creation}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjOhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct task_struct *task`` kthread task in question **Description** Return the data value specified when kthread **task** was created. The caller is responsible for ensuring the validity of **task** when calling this function.h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjnubj)}(hhh]j)}(h6``struct task_struct *task`` kthread task in question h](j)}(h``struct task_struct *task``h]j?)}(hjh]hstruct task_struct *task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j9)}(hkthread task in questionh]hkthread task in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjίh]h Description}(hjЯhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̯ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjnubj9)}(hReturn the data value specified when kthread **task** was created. The caller is responsible for ensuring the validity of **task** when calling this function.h](h-Return the data value specified when kthread }(hjhhhNhNubjz)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhE was created. The caller is responsible for ensuring the validity of }(hjhhhNhNubjz)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh when calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&kthread_complete_and_exit (C function)c.kthread_complete_and_exithNtauh1hhj]hhhNhNubh)}(hhh](h)}(hNvoid __noreturn kthread_complete_and_exit (struct completion *comp, long code)h]h)}(hMvoid __noreturn kthread_complete_and_exit(struct completion *comp, long code)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6ubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhjEhM6ubh __noreturn}(hj3hhhNhNubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhjEhM6ubh)}(hkthread_complete_and_exith]h)}(hkthread_complete_and_exith]hkthread_complete_and_exit}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjEhM6ubj )}(h$(struct completion *comp, long code)h](j&)}(hstruct completion *comph](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h completionh]h completion}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jlsbc.kthread_complete_and_exitasbuh1hhjubj=)}(h h]h }(hjİhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjҰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcomph]hcomp}(hj߰hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubj&)}(h long codeh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjEhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjEhM6ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhjEhM6hj,hhubj )}(hhh]j9)}(hExit the current kthread.h]hExit the current kthread.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hj;hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhM6ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhj]hNhNubjp)}(hXb**Parameters** ``struct completion *comp`` Completion to complete ``long code`` The integer value to return to kthread_stop(). **Description** If present, complete **comp** and then return code to kthread_stop(). A kernel thread whose module may be removed after the completion of **comp** can use this function to exit safely. Does not return.h](j9)}(h**Parameters**h]jz)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM:hjZubj)}(hhh](j)}(h3``struct completion *comp`` Completion to complete h](j)}(h``struct completion *comp``h]j?)}(hjh]hstruct completion *comp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM7hjyubj)}(hhh]j9)}(hCompletion to completeh]hCompletion to complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjvubj)}(h=``long code`` The integer value to return to kthread_stop(). h](j)}(h ``long code``h]j?)}(hjh]h long code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hjubj)}(hhh]j9)}(h.The integer value to return to kthread_stop().h]h.The integer value to return to kthread_stop().}(hjѱhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjͱhM8hjαubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͱhM8hjvubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM:hjZubj9)}(hEIf present, complete **comp** and then return code to kthread_stop().h](hIf present, complete }(hj hhhNhNubjz)}(h**comp**h]hcomp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh( and then return code to kthread_stop().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjZubj9)}(hrA kernel thread whose module may be removed after the completion of **comp** can use this function to exit safely.h](hDA kernel thread whose module may be removed after the completion of }(hj*hhhNhNubjz)}(h**comp**h]hcomp}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh& can use this function to exit safely.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM;hjZubj9)}(hDoes not return.h]hDoes not return.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM>hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kthread_create_on_node (C function)c.kthread_create_on_nodehNtauh1hhj]hhhNhNubh)}(hhh](h)}(hzstruct task_struct * kthread_create_on_node (int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h]h)}(hxstruct task_struct *kthread_create_on_node(int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h](j+)}(hj.h]hstruct}(hjzhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjvhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvhhhjhMubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kthread_create_on_nodesbc.kthread_create_on_nodeasbuh1hhjvhhhjhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvhhhjhMubj)}(hjh]h*}(hjȲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhMubh)}(hkthread_create_on_nodeh]h)}(hjh]hkthread_create_on_node}(hjٲhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjղubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjhMubj )}(hN(int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h](j&)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hthreadfnh]hthreadfn}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjh]h)}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdatah]hdata}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdatah]hdata}(hjʳhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߳ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj߳ubh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߳ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst char namefmt[]h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnamefmth]hnamefmt}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjϧh]h[}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjݧh]h]}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h...h]j)}(h...h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjohhubj )}(hhh]j9)}(hcreate a kthread.h]hcreate a kthread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jĴj4jĴj5j6j7uh1hhhhj]hNhNubjp)}(hX}**Parameters** ``int (*threadfn)(void *data)`` the function to run until signal_pending(current). ``void *data`` data ptr for **threadfn**. ``int node`` task and thread structures for the thread are allocated on this node ``const char namefmt[]`` printf-style name for the thread. ``...`` variable arguments **Description** This helper function creates and names a kernel thread. The thread will be stopped: use wake_up_process() to start it. See also kthread_run(). The new thread has SCHED_NORMAL policy and is affine to all CPUs. If thread is going to be bound on a particular cpu, give its node in **node**, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run **threadfn\(\)** with **data** as its argument. **threadfn\(\)** can either return directly if it is a standalone thread for which no one will call kthread_stop(), or return when 'kthread_should_stop()' is true (which means kthread_stop() has been called). The return value should be zero or a negative error number; it will be passed to kthread_stop(). Returns a task_struct or ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR).h](j9)}(h**Parameters**h]jz)}(hjδh]h Parameters}(hjдhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̴ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjȴubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]j?)}(hjh]hint (*threadfn)(void *data)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j?)}(hj&h]h void *data}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubj)}(hhh]j9)}(hdata ptr for **threadfn**.h](h data ptr for }(hj?hhhNhNubjz)}(h **threadfn**h]hthreadfn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(hR``int node`` task and thread structures for the thread are allocated on this node h](j)}(h ``int node``h]j?)}(hjqh]hint node}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjkubj)}(hhh]j9)}(hDtask and thread structures for the thread are allocated on this nodeh]hDtask and thread structures for the thread are allocated on this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``const char namefmt[]`` printf-style name for the thread. h](j)}(h``const char namefmt[]``h]j?)}(hjh]hconst char namefmt[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjõhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjݵubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjݵubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjȴubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjȴubj9)}(hThis helper function creates and names a kernel thread. The thread will be stopped: use wake_up_process() to start it. See also kthread_run(). The new thread has SCHED_NORMAL policy and is affine to all CPUs.h]hThis helper function creates and names a kernel thread. The thread will be stopped: use wake_up_process() to start it. See also kthread_run(). The new thread has SCHED_NORMAL policy and is affine to all CPUs.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjȴubj9)}(hXIf thread is going to be bound on a particular cpu, give its node in **node**, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run **threadfn\(\)** with **data** as its argument. **threadfn\(\)** can either return directly if it is a standalone thread for which no one will call kthread_stop(), or return when 'kthread_should_stop()' is true (which means kthread_stop() has been called). The return value should be zero or a negative error number; it will be passed to kthread_stop().h](hEIf thread is going to be bound on a particular cpu, give its node in }(hjChhhNhNubjz)}(h**node**h]hnode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhe, to get NUMA affinity for kthread stack, or else give NUMA_NO_NODE. When woken, the thread will run }(hjChhhNhNubjz)}(h**threadfn\(\)**h]h threadfn()}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh with }(hjChhhNhNubjz)}(h**data**h]hdata}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh as its argument. }(hjChhhNhNubjz)}(h**threadfn\(\)**h]h threadfn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhX& can either return directly if it is a standalone thread for which no one will call kthread_stop(), or return when ‘kthread_should_stop()’ is true (which means kthread_stop() has been called). The return value should be zero or a negative error number; it will be passed to kthread_stop().}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjȴubj9)}(h=Returns a task_struct or ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR).h]h=Returns a task_struct or ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM$hjȴubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_bind (C function)c.kthread_bindhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;void kthread_bind (struct task_struct *p, unsigned int cpu)h]h)}(h:void kthread_bind(struct task_struct *p, unsigned int cpu)h](j)}(hvoidh]hvoid}(hjɶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŶhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQubj=)}(h h]h }(hjضhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjŶhhhj׶hMQubh)}(h kthread_bindh]h)}(h kthread_bindh]h kthread_bind}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjŶhhhj׶hMQubj )}(h)(struct task_struct *p, unsigned int cpu)h](j&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h task_structh]h task_struct}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_bindasbuh1hhjubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hp}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjŶhhhj׶hMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj׶hMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj׶hMQhjhhubj )}(hhh]j9)}(h%bind a just-created kthread to a cpu.h]h%bind a just-created kthread to a cpu.}(hjٷhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjַhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj׶hMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hXh**Parameters** ``struct task_struct *p`` thread created by kthread_create(). ``unsigned int cpu`` cpu (might not be online, must be possible) for **k** to run on. **Description** This function is equivalent to set_cpus_allowed(), except that **cpu** doesn't need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubj)}(hhh](j)}(h>``struct task_struct *p`` thread created by kthread_create(). h](j)}(h``struct task_struct *p``h]j?)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMRhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMRhjubj)}(hV``unsigned int cpu`` cpu (might not be online, must be possible) for **k** to run on. h](j)}(h``unsigned int cpu``h]j?)}(hjSh]hunsigned int cpu}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMShjMubj)}(hhh]j9)}(h@cpu (might not be online, must be possible) for **k** to run on.h](h0cpu (might not be online, must be possible) for }(hjlhhhNhNubjz)}(h**k**h]hk}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh to run on.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhhMShjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMShjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubj9)}(hThis function is equivalent to set_cpus_allowed(), except that **cpu** doesn't need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).h](h?This function is equivalent to set_cpus_allowed(), except that }(hjhhhNhNubjz)}(h**cpu**h]hcpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhi doesn’t need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kthread_create_on_cpu (C function)c.kthread_create_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h{struct task_struct * kthread_create_on_cpu (int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h]h)}(hystruct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMbubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kthread_create_on_cpusbc.kthread_create_on_cpuasbuh1hhjhhhjhMbubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMbubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMbubh)}(hkthread_create_on_cpuh]h)}(hj4h]hkthread_create_on_cpu}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMbubj )}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j&)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hthreadfnh]hthreadfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hj6h]h(}(hj¹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hvoidh]hvoid}(hjϹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj=)}(h h]h }(hjݹhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubj&)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdatah]hdata}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubj&)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubh)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubj&)}(hconst char *namefmth](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hj̺hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjںhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMbubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMbhjhhubj )}(hhh]j9)}(hCreate a cpu bound kthreadh]hCreate a cpu bound kthread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``int (*threadfn)(void *data)`` the function to run until signal_pending(current). ``void *data`` data ptr for **threadfn**. ``unsigned int cpu`` The cpu on which the thread should be bound, ``const char *namefmt`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** This helper function creates and names a kernel threadh](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhj;ubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]j?)}(hj`h]hint (*threadfn)(void *data)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMchjZubj)}(hhh]j9)}(h2the function to run until signal_pending(current).h]h2the function to run until signal_pending(current).}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMchjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMchjWubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]j?)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdhjubj)}(hhh]j9)}(hdata ptr for **threadfn**.h](h data ptr for }(hjhhhNhNubjz)}(h **threadfn**h]hthreadfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjWubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]j?)}(hjh]hunsigned int cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMehj޻ubj)}(hhh]j9)}(h,The cpu on which the thread should be bound,h]h,The cpu on which the thread should be bound,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMehjubah}(h]h ]h"]h$]h&]uh1jhj޻ubeh}(h]h ]h"]h$]h&]uh1jhjhMehjWubj)}(h{``const char *namefmt`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. h](j)}(h``const char *namefmt``h]j?)}(hjh]hconst char *namefmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghjubj)}(hhh]j9)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMfhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMghjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMihj;ubj9)}(h6This helper function creates and names a kernel threadh]h6This helper function creates and names a kernel thread}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMihj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_unpark (C function)c.kthread_unparkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h+void kthread_unpark (struct task_struct *k)h]h)}(h*void kthread_unpark(struct task_struct *k)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_unparkh]h)}(hkthread_unparkh]hkthread_unpark}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct task_struct *k)h]j&)}(hstruct task_struct *kh](j+)}(hj.h]hstruct}(hjۼhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj׼ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj׼ubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_unparkasbuh1hhj׼ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj׼ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׼ubh)}(hj7h]hk}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj׼ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjӼubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h,unpark a thread created by kthread_create().h]h,unpark a thread created by kthread_create().}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct task_struct *k`` thread created by kthread_create(). **Description** Sets kthread_should_park() for **k** to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjyubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]j?)}(hjh]hstruct task_struct *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjٽh]h Description}(hj۽hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj׽ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjyubj9)}(hSets kthread_should_park() for **k** to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.h](hSets kthread_should_park() for }(hjhhhNhNubjz)}(h**k**h]hk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhw to return false, wakes it, and waits for it to return. If the thread is marked percpu then its bound to the cpu again.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_park (C function)c.kthread_parkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_park (struct task_struct *k)h]h)}(h'int kthread_park(struct task_struct *k)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj>hMubh)}(h kthread_parkh]h)}(h kthread_parkh]h kthread_park}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hMubj )}(h(struct task_struct *k)h]j&)}(hstruct task_struct *kh](j+)}(hj.h]hstruct}(hjmhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjiubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.kthread_parkasbuh1hhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hj7h]hk}(hjƾhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubah}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj%hhubj )}(hhh]j9)}(h*park a thread created by kthread_create().h]h*park a thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *k`` thread created by kthread_create(). **Description** Sets kthread_should_park() for **k** to return true, wakes it, and waits for it to return. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will park without calling threadfn(). Returns 0 if the thread is parked, -ENOSYS if the thread exited. If called by the kthread itself just the park bit is set.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]j?)}(hj0h]hstruct task_struct *k}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj*ubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubj9)}(hSets kthread_should_park() for **k** to return true, wakes it, and waits for it to return. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will park without calling threadfn().h](hSets kthread_should_park() for }(hjhhhNhNubjz)}(h**k**h]hk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to return true, wakes it, and waits for it to return. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will park without calling threadfn().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubj9)}(hzReturns 0 if the thread is parked, -ENOSYS if the thread exited. If called by the kthread itself just the park bit is set.h]hzReturns 0 if the thread is parked, -ENOSYS if the thread exited. If called by the kthread itself just the park bit is set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_stop (C function)c.kthread_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_stop (struct task_struct *k)h]h)}(h'int kthread_stop(struct task_struct *k)h](j)}(hinth]hint}(hjѿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͿhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjͿhhhj߿hMubh)}(h kthread_stoph]h)}(h kthread_stoph]h kthread_stop}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjͿhhhj߿hMubj )}(h(struct task_struct *k)h]j&)}(hstruct task_struct *kh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(h task_structh]h task_struct}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj.modnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_stopasbuh1hhj ubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hj7h]hk}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjͿhhhj߿hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjɿhhhj߿hMubah}(h]jĿah ](jjeh"]h$]h&]jj)jhuh1hhj߿hMhjƿhhubj )}(hhh]j9)}(h*stop a thread created by kthread_create().h]h*stop a thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjƿhhhj߿hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *k`` thread created by kthread_create(). **Description** Sets kthread_should_stop() for **k** to return true, wakes it, and waits for it to exit. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will exit without calling threadfn(). If threadfn() may call kthread_exit() itself, the caller must ensure task_struct can't go away. Returns the result of threadfn(), or ``-EINTR`` if wake_up_process() was never called.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]j?)}(hjh]hstruct task_struct *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hSets kthread_should_stop() for **k** to return true, wakes it, and waits for it to exit. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will exit without calling threadfn().h](hSets kthread_should_stop() for }(hj"hhhNhNubjz)}(h**k**h]hk}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh to return true, wakes it, and waits for it to exit. This can also be called after kthread_create() instead of calling wake_up_process(): the thread will exit without calling threadfn().}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h_If threadfn() may call kthread_exit() itself, the caller must ensure task_struct can't go away.h]haIf threadfn() may call kthread_exit() itself, the caller must ensure task_struct can’t go away.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hVReturns the result of threadfn(), or ``-EINTR`` if wake_up_process() was never called.h](h%Returns the result of threadfn(), or }(hjRhhhNhNubj?)}(h ``-EINTR``h]h-EINTR}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubh' if wake_up_process() was never called.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_stop_put (C function)c.kthread_stop_puthNtauh1hhj]hhhNhNubh)}(hhh](h)}(h,int kthread_stop_put (struct task_struct *k)h]h)}(h+int kthread_stop_put(struct task_struct *k)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_stop_puth]h)}(hkthread_stop_puth]hkthread_stop_put}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct task_struct *k)h]j&)}(hstruct task_struct *kh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h task_structh]h task_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_stop_putasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hj7h]hk}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%stop a thread and put its task structh]h%stop a thread and put its task struct}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *k`` thread created by kthread_create(). **Description** Stops a thread created by kthread_create() and put its task_struct. Only use when holding an extra task struct reference obtained by calling get_task_struct().h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjnubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]j?)}(hjh]hstruct task_struct *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjnubj9)}(hStops a thread created by kthread_create() and put its task_struct. Only use when holding an extra task struct reference obtained by calling get_task_struct().h]hStops a thread created by kthread_create() and put its task_struct. Only use when holding an extra task struct reference obtained by calling get_task_struct().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kthread_affine_preferred (C function)c.kthread_affine_preferredhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hPint kthread_affine_preferred (struct task_struct *p, const struct cpumask *mask)h]h)}(hOint kthread_affine_preferred(struct task_struct *p, const struct cpumask *mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM<ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj!hM<ubh)}(hkthread_affine_preferredh]h)}(hkthread_affine_preferredh]hkthread_affine_preferred}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hM<ubj )}(h3(struct task_struct *p, const struct cpumask *mask)h](j&)}(hstruct task_struct *ph](j+)}(hj.h]hstruct}(hjPhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hhh]h)}(h task_structh]h task_struct}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]jl)}j_j6sbc.kthread_affine_preferredasbuh1hhjLubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hp}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubj&)}(hconst struct cpumask *maskh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hcpumaskh]hcpumask}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kthread_affine_preferredasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmaskh]hmask}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hM<ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj!hM<ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj!hM<hjhhubj )}(hhh]j9)}(h%Define a kthread's preferred affinityh]h'Define a kthread’s preferred affinity}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM<hjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM<ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3juj4juj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct task_struct *p`` thread created by kthread_create(). ``const struct cpumask *mask`` preferred mask of CPUs (might not be online, must be possible) for **p** to run on. **Description** Similar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread. Returns 0 if the affinity has been applied.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM@hjyubj)}(hhh](j)}(h>``struct task_struct *p`` thread created by kthread_create(). h](j)}(h``struct task_struct *p``h]j?)}(hjh]hstruct task_struct *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM=hjubj)}(hhh]j9)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(hs``const struct cpumask *mask`` preferred mask of CPUs (might not be online, must be possible) for **p** to run on. h](j)}(h``const struct cpumask *mask``h]j?)}(hjh]hconst struct cpumask *mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM?hjubj)}(hhh]j9)}(hSpreferred mask of CPUs (might not be online, must be possible) for **p** to run on.h](hCpreferred mask of CPUs (might not be online, must be possible) for }(hjhhhNhNubjz)}(h**p**h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to run on.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMAhjyubj9)}(hSimilar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread.h]hSimilar to kthread_bind_mask() except that the affinity is not a requirement but rather a preference that can be constrained by CPU isolation or CPU hotplug. Must be called before the first wakeup of the kthread.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM@hjyubj9)}(h+Returns 0 if the affinity has been applied.h]h+Returns 0 if the affinity has been applied.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMDhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_worker_fn (C function)c.kthread_worker_fnhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_worker_fn (void *worker_ptr)h]h)}(h'int kthread_worker_fn(void *worker_ptr)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuhhhjhMubh)}(hkthread_worker_fnh]h)}(hkthread_worker_fnh]hkthread_worker_fn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjhMubj )}(h(void *worker_ptr)h]j&)}(hvoid *worker_ptrh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h worker_ptrh]h worker_ptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjuhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjqhhhjhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjnhhubj )}(hhh]j9)}(h*kthread function to process kthread_workerh]h*kthread function to process kthread_worker}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!j4j!j5j6j7uh1hhhhj]hNhNubjp)}(hX-**Parameters** ``void *worker_ptr`` pointer to initialized kthread_worker **Description** This function implements the main cycle of kthread worker. It processes work_list until it is stopped with kthread_stop(). It sleeps when the queue is empty. The works are not allowed to keep any locks, disable preemption or interrupts when they finish. There is defined a safe point for freezing when one work finishes and before a new one is started. Also the works must not be handled by more than one worker at the same time, see also kthread_queue_work().h](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%ubj)}(hhh]j)}(h;``void *worker_ptr`` pointer to initialized kthread_worker h](j)}(h``void *worker_ptr``h]j?)}(hjJh]hvoid *worker_ptr}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjDubj)}(hhh]j9)}(h%pointer to initialized kthread_workerh]h%pointer to initialized kthread_worker}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%ubj9)}(hThis function implements the main cycle of kthread worker. It processes work_list until it is stopped with kthread_stop(). It sleeps when the queue is empty.h]hThis function implements the main cycle of kthread worker. It processes work_list until it is stopped with kthread_stop(). It sleeps when the queue is empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%ubj9)}(hThe works are not allowed to keep any locks, disable preemption or interrupts when they finish. There is defined a safe point for freezing when one work finishes and before a new one is started.h]hThe works are not allowed to keep any locks, disable preemption or interrupts when they finish. There is defined a safe point for freezing when one work finishes and before a new one is started.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%ubj9)}(hkAlso the works must not be handled by more than one worker at the same time, see also kthread_queue_work().h]hkAlso the works must not be handled by more than one worker at the same time, see also kthread_queue_work().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*kthread_create_worker_on_node (C function)c.kthread_create_worker_on_nodehNtauh1hhj]hhhNhNubh)}(hhh](h)}(hostruct kthread_worker * kthread_create_worker_on_node (unsigned int flags, int node, const char namefmt[], ...)h]h)}(hmstruct kthread_worker *kthread_create_worker_on_node(unsigned int flags, int node, const char namefmt[], ...)h](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM5ubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_kthread_create_worker_on_nodesbc.kthread_create_worker_on_nodeasbuh1hhjhhhjhM5ubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM5ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM5ubh)}(hkthread_create_worker_on_nodeh]h)}(hj%h]hkthread_create_worker_on_node}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM5ubj )}(h9(unsigned int flags, int node, const char namefmt[], ...)h](j&)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubj&)}(hint nodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubj&)}(hconst char namefmt[]h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjϧh]h[}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjݧh]h]}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubj&)}(h...h]j)}(hjh]h...}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM5hjhhubj )}(hhh]j9)}(hcreate a kthread workerh]hcreate a kthread worker}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5hjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``unsigned int flags`` flags modifying the default behavior of the worker ``int node`` task structure for the thread is allocated on this node ``const char namefmt[]`` printf-style name for the kthread worker (task). ``...`` variable arguments **Description** Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjubj)}(hhh](j)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]j?)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjubj)}(hhh]j9)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(hE``int node`` task structure for the thread is allocated on this node h](j)}(h ``int node``h]j?)}(hjh]hint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM7hjubj)}(hhh]j9)}(h7task structure for the thread is allocated on this nodeh]h7task structure for the thread is allocated on this node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM7hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjubj)}(hJ``const char namefmt[]`` printf-style name for the kthread worker (task). h](j)}(h``const char namefmt[]``h]j?)}(hj.h]hconst char namefmt[]}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hj(ubj)}(hhh]j9)}(h0printf-style name for the kthread worker (task).h]h0printf-style name for the kthread worker (task).}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM8hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM8hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjgh]h...}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjaubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj9)}(hReturns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h]hReturns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)kthread_create_worker_on_cpu (C function)c.kthread_create_worker_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hhstruct kthread_worker * kthread_create_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hfstruct kthread_worker *kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMMubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kthread_create_worker_on_cpusbc.kthread_create_worker_on_cpuasbuh1hhjhhhjhMMubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMMubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMMubh)}(hkthread_create_worker_on_cpuh]h)}(hj$h]hkthread_create_worker_on_cpu}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMMubj )}(h3(int cpu, unsigned int flags, const char namefmt[])h](j&)}(hint cpuh](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]ubh)}(hcpuh]hcpu}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubj&)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubj&)}(hconst char namefmt[]h](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubj)}(hjϧh]h[}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjݧh]h]}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMMhjhhubj )}(hhh]j9)}(hPcreate a kthread worker and bind it to a given CPU and the associated NUMA node.h]hPcreate a kthread worker and bind it to a given CPU and the associated NUMA node.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jzj4jzj5j6j7uh1hhhhj]hNhNubjp)}(hX1**Parameters** ``int cpu`` CPU number ``unsigned int flags`` flags modifying the default behavior of the worker ``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. **Description** Use a valid CPU number if you want to bind the kthread worker to the given CPU and the associated NUMA node. A good practice is to add the cpu number also into the worker name. For example, use kthread_create_worker_on_cpu(cpu, "helper/``d``", cpu). CPU hotplug: The kthread worker API is simple and generic. It just provides a way to create, use, and destroy workers. It is up to the API user how to handle CPU hotplug. They have to decide how to handle pending work items, prevent queuing new ones, and restore the functionality when the CPU goes off and on. There are a few catches: - CPU affinity gets lost when it is scheduled on an offline CPU. - The worker might not exist when the CPU was off when the user created the workers. Good practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up. **Return** The pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhj~ubj)}(hhh](j)}(h``int cpu`` CPU number h](j)}(h ``int cpu``h]j?)}(hjh]hint cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMOhjubj)}(hhh]j9)}(h CPU numberh]h CPU number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]j?)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMPhjubj)}(hhh]j9)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h|``const char namefmt[]`` printf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number. h](j)}(h``const char namefmt[]``h]j?)}(hjh]hconst char namefmt[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhjubj)}(hhh]j9)}(hbprintf-style name for the thread. Format is restricted to "name.*``u``". Code fills in cpu number.h]hfprintf-style name for the thread. Format is restricted to “name.*``u``”. Code fills in cpu number.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMRhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMThj~ubj9)}(hlUse a valid CPU number if you want to bind the kthread worker to the given CPU and the associated NUMA node.h]hlUse a valid CPU number if you want to bind the kthread worker to the given CPU and the associated NUMA node.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMShj~ubj9)}(hA good practice is to add the cpu number also into the worker name. For example, use kthread_create_worker_on_cpu(cpu, "helper/``d``", cpu).h](hA good practice is to add the cpu number also into the worker name. For example, use kthread_create_worker_on_cpu(cpu, “helper/}(hjvhhhNhNubj?)}(h``d``h]hd}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubh ”, cpu).}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMVhj~ubj9)}(hvCPU hotplug: The kthread worker API is simple and generic. It just provides a way to create, use, and destroy workers.h]hvCPU hotplug: The kthread worker API is simple and generic. It just provides a way to create, use, and destroy workers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMYhj~ubj9)}(hIt is up to the API user how to handle CPU hotplug. They have to decide how to handle pending work items, prevent queuing new ones, and restore the functionality when the CPU goes off and on. There are a few catches:h]hIt is up to the API user how to handle CPU hotplug. They have to decide how to handle pending work items, prevent queuing new ones, and restore the functionality when the CPU goes off and on. There are a few catches:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM]hj~ubjU)}(h- CPU affinity gets lost when it is scheduled on an offline CPU. - The worker might not exist when the CPU was off when the user created the workers. h]j_)}(hhh](jp)}(h?CPU affinity gets lost when it is scheduled on an offline CPU. h]j9)}(h>CPU affinity gets lost when it is scheduled on an offline CPU.h]h>CPU affinity gets lost when it is scheduled on an offline CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbhjubah}(h]h ]h"]h$]h&]uh1johjubjp)}(hSThe worker might not exist when the CPU was off when the user created the workers. h]j9)}(hRThe worker might not exist when the CPU was off when the user created the workers.h]hRThe worker might not exist when the CPU was off when the user created the workers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdhjubah}(h]h ]h"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]j_j_uh1j_hjhMbhjubah}(h]h ]h"]h$]h&]uh1jThjhMbhj~ubj9)}(hsGood practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up.h]hsGood practice is to implement two CPU hotplug callbacks and to destroy/create the worker when the CPU goes down/up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMghj~ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMjhj~ubj9)}(hThe pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.h]hThe pointer to the allocated worker on success, ERR_PTR(-ENOMEM) when the needed structures could not get allocated, and ERR_PTR(-EINTR) when the caller was killed by a fatal signal.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMkhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_queue_work (C function)c.kthread_queue_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hRbool kthread_queue_work (struct kthread_worker *worker, struct kthread_work *work)h]h)}(hQbool kthread_queue_work(struct kthread_worker *worker, struct kthread_work *work)h](j)}(hjh]hbool}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLhhhj]hMubh)}(hkthread_queue_workh]h)}(hkthread_queue_workh]hkthread_queue_work}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhj]hMubj )}(h:(struct kthread_worker *worker, struct kthread_work *work)h](j&)}(hstruct kthread_worker *workerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jrsbc.kthread_queue_workasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct kthread_work *workh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kthread_queue_workasbuh1hhjubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkh]hwork}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjLhhhj]hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhj]hMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhj]hMhjEhhubj )}(hhh]j9)}(hqueue a kthread_workh]hqueue a kthread_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj]hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct kthread_worker *worker`` target kthread_worker ``struct kthread_work *work`` kthread_work to queue **Description** Queue **work** to work processor **task** for async execution. **task** must have been created with kthread_create_worker(). Returns ``true`` if **work** was successfully queued, ``false`` if it was already pending. Reinitialize the work if it needs to be used by another worker. For example, when the worker was stopped and started again.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh](j)}(h8``struct kthread_worker *worker`` target kthread_worker h](j)}(h!``struct kthread_worker *worker``h]j?)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(htarget kthread_workerh]htarget kthread_worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``struct kthread_work *work`` kthread_work to queue h](j)}(h``struct kthread_work *work``h]j?)}(hjh]hstruct kthread_work *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hkthread_work to queueh]hkthread_work to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hQueue **work** to work processor **task** for async execution. **task** must have been created with kthread_create_worker(). Returns ``true`` if **work** was successfully queued, ``false`` if it was already pending.h](hQueue }(hjJhhhNhNubjz)}(h**work**h]hwork}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh to work processor }(hjJhhhNhNubjz)}(h**task**h]htask}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh for async execution. }(hjJhhhNhNubjz)}(h**task**h]htask}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh? must have been created with kthread_create_worker(). Returns }(hjJhhhNhNubj?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubh if }(hjJhhhNhNubjz)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh was successfully queued, }(hjJhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubh if it was already pending.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h{Reinitialize the work if it needs to be used by another worker. For example, when the worker was stopped and started again.h]h{Reinitialize the work if it needs to be used by another worker. For example, when the worker was stopped and started again.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*kthread_delayed_work_timer_fn (C function)c.kthread_delayed_work_timer_fnhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9void kthread_delayed_work_timer_fn (struct timer_list *t)h]h)}(h8void kthread_delayed_work_timer_fn(struct timer_list *t)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_delayed_work_timer_fnh]h)}(hkthread_delayed_work_timer_fnh]hkthread_delayed_work_timer_fn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct timer_list *t)h]j&)}(hstruct timer_list *th](j+)}(hj.h]hstruct}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hhh]h)}(h timer_listh]h timer_list}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_delayed_work_timer_fnasbuh1hhj-ubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hjRlh]ht}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hPcallback that queues the associated kthread delayed work when the timer expires.h]hPcallback that queues the associated kthread delayed work when the timer expires.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct timer_list *t`` pointer to the expired timer **Description** The format of the function is defined by struct timer_list. It should have been called from irqsafe timer with irq already off.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(h6``struct timer_list *t`` pointer to the expired timer h](j)}(h``struct timer_list *t``h]j?)}(hjh]hstruct timer_list *t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hpointer to the expired timerh]hpointer to the expired timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hThe format of the function is defined by struct timer_list. It should have been called from irqsafe timer with irq already off.h]hThe format of the function is defined by struct timer_list. It should have been called from irqsafe timer with irq already off.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'kthread_queue_delayed_work (C function)c.kthread_queue_delayed_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hxbool kthread_queue_delayed_work (struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h]h)}(hwbool kthread_queue_delayed_work(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j)}(hjh]hbool}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjphhhjhMubh)}(hkthread_queue_delayed_workh]h)}(hkthread_queue_delayed_workh]hkthread_queue_delayed_work}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjhMubj )}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j&)}(hstruct kthread_worker *workerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_queue_delayed_workasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkerh]hworker}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h"struct kthread_delayed_work *dworkh](j+)}(hj.h]hstruct}(hj"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjBmodnameN classnameNjcjf)}ji]jc.kthread_queue_delayed_workasbuh1hhjubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdworkh]hdwork}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hdelayh]hdelay}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhjhMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjihhubj )}(hhh]j9)}(h0queue the associated kthread work after a delay.h]h0queue the associated kthread work after a delay.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj]hNhNubjp)}(hX'**Parameters** ``struct kthread_worker *worker`` target kthread_worker ``struct kthread_delayed_work *dwork`` kthread_delayed_work to queue ``unsigned long delay`` number of jiffies to wait before queuing **Description** If the work has not been pending it starts a timer that will queue the work after the given **delay**. If **delay** is zero, it queues the work immediately. **Return** ``false`` if the **work** has already been pending. It means that either the timer was running or the work was queued. It returns ``true`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh](j)}(h8``struct kthread_worker *worker`` target kthread_worker h](j)}(h!``struct kthread_worker *worker``h]j?)}(hj5h]hstruct kthread_worker *worker}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj/ubj)}(hhh]j9)}(htarget kthread_workerh]htarget kthread_worker}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(hE``struct kthread_delayed_work *dwork`` kthread_delayed_work to queue h](j)}(h&``struct kthread_delayed_work *dwork``h]j?)}(hjnh]h"struct kthread_delayed_work *dwork}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhubj)}(hhh]j9)}(hkthread_delayed_work to queueh]hkthread_delayed_work to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]j?)}(hjh]hunsigned long delay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hIf the work has not been pending it starts a timer that will queue the work after the given **delay**. If **delay** is zero, it queues the work immediately.h](h\If the work has not been pending it starts a timer that will queue the work after the given }(hjhhhNhNubjz)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. If }(hjhhhNhNubjz)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) is zero, it queues the work immediately.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubj9)}(h``false`` if the **work** has already been pending. It means that either the timer was running or the work was queued. It returns ``true`` otherwise.h](j?)}(h ``false``h]hfalse}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubh if the }(hjChhhNhNubjz)}(h**work**h]hwork}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhi has already been pending. It means that either the timer was running or the work was queued. It returns }(hjChhhNhNubj?)}(h``true``h]htrue}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubh otherwise.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_flush_work (C function)c.kthread_flush_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h3void kthread_flush_work (struct kthread_work *work)h]h)}(h2void kthread_flush_work(struct kthread_work *work)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM1ubh)}(hkthread_flush_workh]h)}(hkthread_flush_workh]hkthread_flush_work}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM1ubj )}(h(struct kthread_work *work)h]j&)}(hstruct kthread_work *workh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_flush_workasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkh]hwork}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM1hjhhubj )}(hhh]j9)}(hflush a kthread_workh]hflush a kthread_work}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1hjahhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j|j4j|j5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct kthread_work *work`` work to flush **Description** If **work** is queued or executing, wait for it to finish execution.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5hjubj)}(hhh]j)}(h,``struct kthread_work *work`` work to flush h](j)}(h``struct kthread_work *work``h]j?)}(hjh]hstruct kthread_work *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjubj)}(hhh]j9)}(h work to flushh]h work to flush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM4hjubj9)}(hDIf **work** is queued or executing, wait for it to finish execution.h](hIf }(hjhhhNhNubjz)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh9 is queued or executing, wait for it to finish execution.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kthread_mod_delayed_work (C function)c.kthread_mod_delayed_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hvbool kthread_mod_delayed_work (struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h]h)}(hubool kthread_mod_delayed_work(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j)}(hjh]hbool}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhjDhMubh)}(hkthread_mod_delayed_workh]h)}(hkthread_mod_delayed_workh]hkthread_mod_delayed_work}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjDhMubj )}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j&)}(hstruct kthread_worker *workerh](j+)}(hj.h]hstruct}(hjshhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jYsbc.kthread_mod_delayed_workasbuh1hhjoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubj&)}(h"struct kthread_delayed_work *dworkh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kthread_mod_delayed_workasbuh1hhjubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdworkh]hdwork}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubj&)}(hunsigned long delayh](j)}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hlongh]hlong}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh)}(hdelayh]hdelay}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjDhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjDhMubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhjDhMhj,hhubj )}(hhh]j9)}(h/modify delay of or queue a kthread delayed workh]h/modify delay of or queue a kthread delayed work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjDhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX>**Parameters** ``struct kthread_worker *worker`` kthread worker to use ``struct kthread_delayed_work *dwork`` kthread delayed work to queue ``unsigned long delay`` number of jiffies to wait before queuing **Description** If **dwork** is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify **dwork**'s timer so that it expires after **delay**. If **delay** is zero, **work** is guaranteed to be queued immediately. A special case is when the work is being canceled in parallel. It might be caused either by the real kthread_cancel_delayed_work_sync() or yet another kthread_mod_delayed_work() call. We let the other command win and return ``true`` here. The return value can be used for reference counting and the number of queued works stays the same. Anyway, the caller is supposed to synchronize these operations a reasonable way. This function is safe to call from any context including IRQ handler. See __kthread_cancel_work() and kthread_delayed_work_timer_fn() for details. **Return** ``false`` if **dwork** was idle and queued, ``true`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh](j)}(h8``struct kthread_worker *worker`` kthread worker to use h](j)}(h!``struct kthread_worker *worker``h]j?)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hkthread worker to useh]hkthread worker to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hE``struct kthread_delayed_work *dwork`` kthread delayed work to queue h](j)}(h&``struct kthread_delayed_work *dwork``h]j?)}(hj1h]h"struct kthread_delayed_work *dwork}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj+ubj)}(hhh]j9)}(hkthread delayed work to queueh]hkthread delayed work to queue}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubj)}(hA``unsigned long delay`` number of jiffies to wait before queuing h](j)}(h``unsigned long delay``h]j?)}(hjjh]hunsigned long delay}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjdubj)}(hhh]j9)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hIf **dwork** is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify **dwork**'s timer so that it expires after **delay**. If **delay** is zero, **work** is guaranteed to be queued immediately.h](hIf }(hjhhhNhNubjz)}(h **dwork**h]hdwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhH is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify }(hjhhhNhNubjz)}(h **dwork**h]hdwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$’s timer so that it expires after }(hjhhhNhNubjz)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. If }(hjhhhNhNubjz)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is zero, }(hjhhhNhNubjz)}(h**work**h]hwork}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh( is guaranteed to be queued immediately.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hXA special case is when the work is being canceled in parallel. It might be caused either by the real kthread_cancel_delayed_work_sync() or yet another kthread_mod_delayed_work() call. We let the other command win and return ``true`` here. The return value can be used for reference counting and the number of queued works stays the same. Anyway, the caller is supposed to synchronize these operations a reasonable way.h](hA special case is when the work is being canceled in parallel. It might be caused either by the real kthread_cancel_delayed_work_sync() or yet another kthread_mod_delayed_work() call. We let the other command win and return }(hj$hhhNhNubj?)}(h``true``h]htrue}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubh here. The return value can be used for reference counting and the number of queued works stays the same. Anyway, the caller is supposed to synchronize these operations a reasonable way.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hThis function is safe to call from any context including IRQ handler. See __kthread_cancel_work() and kthread_delayed_work_timer_fn() for details.h]hThis function is safe to call from any context including IRQ handler. See __kthread_cancel_work() and kthread_delayed_work_timer_fn() for details.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h?``false`` if **dwork** was idle and queued, ``true`` otherwise.h](j?)}(h ``false``h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh if }(hjlhhhNhNubjz)}(h **dwork**h]hdwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh was idle and queued, }(hjlhhhNhNubj?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubh otherwise.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kthread_cancel_work_sync (C function)c.kthread_cancel_work_synchNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9bool kthread_cancel_work_sync (struct kthread_work *work)h]h)}(h8bool kthread_cancel_work_sync(struct kthread_work *work)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_cancel_work_synch]h)}(hkthread_cancel_work_synch]hkthread_cancel_work_sync}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct kthread_work *work)h]j&)}(hstruct kthread_work *workh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kthread_workh]h kthread_work}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_cancel_work_syncasbuh1hhjubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkh]hwork}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h/cancel a kthread work and wait for it to finishh]h/cancel a kthread work and wait for it to finish}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct kthread_work *work`` the kthread work to cancel **Description** Cancel **work** and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, **work** is guaranteed to be not pending or executing on any CPU. kthread_cancel_work_sync(:c:type:`delayed_work->work `) must not be used for delayed_work's. Use kthread_cancel_delayed_work_sync() instead. The caller must ensure that the worker on which **work** was last queued can't be destroyed before this function returns. **Return** ``true`` if **work** was pending, ``false`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(h9``struct kthread_work *work`` the kthread work to cancel h](j)}(h``struct kthread_work *work``h]j?)}(hjh]hstruct kthread_work *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hthe kthread work to cancelh]hthe kthread work to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hCancel **work** and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, **work** is guaranteed to be not pending or executing on any CPU.h](hCancel }(hjhhhNhNubjz)}(h**work**h]hwork}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and wait for its execution to finish. This function can be used even if the work re-queues itself. On return from this function, }(hjhhhNhNubjz)}(h**work**h]hwork}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh9 is guaranteed to be not pending or executing on any CPU.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hkthread_cancel_work_sync(:c:type:`delayed_work->work `) must not be used for delayed_work's. Use kthread_cancel_delayed_work_sync() instead.h](hkthread_cancel_work_sync(}(hjQhhhNhNubh)}(h+:c:type:`delayed_work->work `h]j?)}(hj[h]hdelayed_work->work}(hj]hhhNhNubah}(h]h ](jj-c-typeeh"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjj delayed_workuh1hhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjQubhX) must not be used for delayed_work’s. Use kthread_cancel_delayed_work_sync() instead.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjxhMhjubj9)}(hyThe caller must ensure that the worker on which **work** was last queued can't be destroyed before this function returns.h](h0The caller must ensure that the worker on which }(hjhhhNhNubjz)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhC was last queued can’t be destroyed before this function returns.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h6``true`` if **work** was pending, ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if }(hjhhhNhNubjz)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was pending, }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-kthread_cancel_delayed_work_sync (C function)"c.kthread_cancel_delayed_work_synchNtauh1hhj]hhhNhNubh)}(hhh](h)}(hJbool kthread_cancel_delayed_work_sync (struct kthread_delayed_work *dwork)h]h)}(hIbool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *dwork)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj*hMubh)}(h kthread_cancel_delayed_work_synch]h)}(h kthread_cancel_delayed_work_synch]h kthread_cancel_delayed_work_sync}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj*hMubj )}(h$(struct kthread_delayed_work *dwork)h]j&)}(h"struct kthread_delayed_work *dworkh](j+)}(hj.h]hstruct}(hjYhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjUubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hhh]h)}(hkthread_delayed_workh]hkthread_delayed_work}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjymodnameN classnameNjcjf)}ji]jl)}j_j?sb"c.kthread_cancel_delayed_work_syncasbuh1hhjUubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hdworkh]hdwork}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj*hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj*hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj*hMhjhhubj )}(hhh]j9)}(h8cancel a kthread delayed work and wait for it to finish.h]h8cancel a kthread delayed work and wait for it to finish.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct kthread_delayed_work *dwork`` the kthread delayed work to cancel **Description** This is kthread_cancel_work_sync() for delayed works. **Return** ``true`` if **dwork** was pending, ``false`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(hJ``struct kthread_delayed_work *dwork`` the kthread delayed work to cancel h](j)}(h&``struct kthread_delayed_work *dwork``h]j?)}(hjh]h"struct kthread_delayed_work *dwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(h"the kthread delayed work to cancelh]h"the kthread delayed work to cancel}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h5This is kthread_cancel_work_sync() for delayed works.h]h5This is kthread_cancel_work_sync() for delayed works.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(h7``true`` if **dwork** was pending, ``false`` otherwise.h](j?)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh if }(hjhhhNhNubjz)}(h **dwork**h]hdwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was pending, }(hjhhhNhNubj?)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kthread_flush_worker (C function)c.kthread_flush_workerhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9void kthread_flush_worker (struct kthread_worker *worker)h]h)}(h8void kthread_flush_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_flush_workerh]h)}(hkthread_flush_workerh]hkthread_flush_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct kthread_worker *worker)h]j&)}(hstruct kthread_worker *workerh](j+)}(hj.h]hstruct}(hj3hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj/ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_flush_workerasbuh1hhj/ubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h+flush all current works on a kthread_workerh]h+flush all current works on a kthread_worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(h**Parameters** ``struct kthread_worker *worker`` worker to flush **Description** Wait until all currently executing or pending works on **worker** are finished.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM!hjubj)}(hhh]j)}(h2``struct kthread_worker *worker`` worker to flush h](j)}(h!``struct kthread_worker *worker``h]j?)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hworker to flushh]hworker to flush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM hjubj9)}(hOWait until all currently executing or pending works on **worker** are finished.h](h7Wait until all currently executing or pending works on }(hjHhhhNhNubjz)}(h **worker**h]hworker}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh are finished.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kthread_destroy_worker (C function)c.kthread_destroy_workerhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;void kthread_destroy_worker (struct kthread_worker *worker)h]h)}(h:void kthread_destroy_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM0ubh)}(hkthread_destroy_workerh]h)}(hkthread_destroy_workerh]hkthread_destroy_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM0ubj )}(h(struct kthread_worker *worker)h]j&)}(hstruct kthread_worker *workerh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkthread_workerh]hkthread_worker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_destroy_workerasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM0ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1hhjhM0hj~hhubj )}(hhh]j9)}(hdestroy a kthread workerh]hdestroy a kthread worker}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0hjFhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhM0ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct kthread_worker *worker`` worker to be destroyed **Description** Flush and destroy **worker**. The simple flush is enough because the kthread worker API is used only in trivial scenarios. There are no multi-step state machines needed. Note that this function is not responsible for handling delayed work, so caller should be responsible for queuing or canceling all delayed work items before invoke this function.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM4hjeubj)}(hhh]j)}(h9``struct kthread_worker *worker`` worker to be destroyed h](j)}(h!``struct kthread_worker *worker``h]j?)}(hjh]hstruct kthread_worker *worker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM1hjubj)}(hhh]j9)}(hworker to be destroyedh]hworker to be destroyed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM3hjeubj9)}(hFlush and destroy **worker**. The simple flush is enough because the kthread worker API is used only in trivial scenarios. There are no multi-step state machines needed.h](hFlush and destroy }(hjhhhNhNubjz)}(h **worker**h]hworker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh. The simple flush is enough because the kthread worker API is used only in trivial scenarios. There are no multi-step state machines needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM2hjeubj9)}(hNote that this function is not responsible for handling delayed work, so caller should be responsible for queuing or canceling all delayed work items before invoke this function.h]hNote that this function is not responsible for handling delayed work, so caller should be responsible for queuing or canceling all delayed work items before invoke this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_use_mm (C function)c.kthread_use_mmhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h*void kthread_use_mm (struct mm_struct *mm)h]h)}(h)void kthread_use_mm(struct mm_struct *mm)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj9hMLubh)}(hkthread_use_mmh]h)}(hkthread_use_mmh]hkthread_use_mm}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hMLubj )}(h(struct mm_struct *mm)h]j&)}(hstruct mm_struct *mmh](j+)}(hj.h]hstruct}(hjhhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjdubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jNsbc.kthread_use_mmasbuh1hhjdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubah}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hMLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj9hMLhj hhubj )}(hhh]j9)}(h4make the calling kthread operate on an address spaceh]h4make the calling kthread operate on an address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMLubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMPhjubj)}(hhh]j)}(h4``struct mm_struct *mm`` address space to operate onh](j)}(h``struct mm_struct *mm``h]j?)}(hj,h]hstruct mm_struct *mm}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMRhj&ubj)}(hhh]j9)}(haddress space to operate onh]haddress space to operate on}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMRhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkthread_unuse_mm (C function)c.kthread_unuse_mmhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h,void kthread_unuse_mm (struct mm_struct *mm)h]h)}(h+void kthread_unuse_mm(struct mm_struct *mm)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM{ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM{ubh)}(hkthread_unuse_mmh]h)}(hkthread_unuse_mmh]hkthread_unuse_mm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM{ubj )}(h(struct mm_struct *mm)h]j&)}(hstruct mm_struct *mmh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h mm_structh]h mm_struct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_unuse_mmasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhM{ubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjhM{hj{hhubj )}(hhh]j9)}(h&reverse the effect of kthread_use_mm()h]h&reverse the effect of kthread_use_mm()}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM{hjChhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhM{ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^j4j^j5j6j7uh1hhhhj]hNhNubjp)}(hF**Parameters** ``struct mm_struct *mm`` address space to operate onh](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjbubj)}(hhh]j)}(h4``struct mm_struct *mm`` address space to operate onh](j)}(h``struct mm_struct *mm``h]j?)}(hjh]hstruct mm_struct *mm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(haddress space to operate onh]haddress space to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$kthread_associate_blkcg (C function)c.kthread_associate_blkcghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h>void kthread_associate_blkcg (struct cgroup_subsys_state *css)h]h)}(h=void kthread_associate_blkcg(struct cgroup_subsys_state *css)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkthread_associate_blkcgh]h)}(hkthread_associate_blkcgh]hkthread_associate_blkcg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h!(struct cgroup_subsys_state *css)h]j&)}(hstruct cgroup_subsys_state *cssh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hcgroup_subsys_stateh]hcgroup_subsys_state}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj>modnameN classnameNjcjf)}ji]jl)}j_jsbc.kthread_associate_blkcgasbuh1hhjubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcssh]hcss}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h"associate blkcg to current kthreadh]h"associate blkcg to current kthread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj]hNhNubjp)}(hX**Parameters** ``struct cgroup_subsys_state *css`` the cgroup info **Description** Current thread must be a kthread. The thread is running jobs on behalf of other threads. In some cases, we expect the jobs attach cgroup info of original threads instead of that of current thread. This function stores original thread's cgroup info in current kthread context for later retrieval.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j)}(h4``struct cgroup_subsys_state *css`` the cgroup info h](j)}(h#``struct cgroup_subsys_state *css``h]j?)}(hjh]hstruct cgroup_subsys_state *css}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj)}(hhh]j9)}(hthe cgroup infoh]hthe cgroup info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubj9)}(hX'Current thread must be a kthread. The thread is running jobs on behalf of other threads. In some cases, we expect the jobs attach cgroup info of original threads instead of that of current thread. This function stores original thread's cgroup info in current kthread context for later retrieval.h]hX)Current thread must be a kthread. The thread is running jobs on behalf of other threads. In some cases, we expect the jobs attach cgroup info of original threads instead of that of current thread. This function stores original thread’s cgroup info in current kthread context for later retrieval.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj]hhhNhNubeh}(h]internal-functionsah ]h"]internal functionsah$]h&]uh1hhhhhhhhKFubh)}(hhh](h)}(hReference countingh]hReference counting}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhhhhhKUubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_set (C function)c.refcount_sethNtauh1hhjQhhhNhNubh)}(hhh](h)}(h(void refcount_set (refcount_t *r, int n)h]h)}(h'void refcount_set(refcount_t *r, int n)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjhKubh)}(h refcount_seth]h)}(h refcount_seth]h refcount_set}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhKubj )}(h(refcount_t *r, int n)h](j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_setasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hrh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint nh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]hn}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjhKubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjphhubj )}(hhh]j9)}(hset a refcount's valueh]hset a refcount’s value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjQhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhjQhNhNubjp)}(he**Parameters** ``refcount_t *r`` the refcount ``int n`` value to which the refcount will be seth](j9)}(h**Parameters**h]jz)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjpubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``int n`` value to which the refcount will be seth](j)}(h ``int n``h]j?)}(hjh]hint n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j9)}(h'value to which the refcount will be seth]h'value to which the refcount will be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!refcount_set_release (C function)c.refcount_set_releasehNtauh1hhjQhhhNhNubh)}(hhh](h)}(h0void refcount_set_release (refcount_t *r, int n)h]h)}(h/void refcount_set_release(refcount_t *r, int n)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$hhhj6hKubh)}(hrefcount_set_releaseh]h)}(hrefcount_set_releaseh]hrefcount_set_release}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj6hKubj )}(h(refcount_t *r, int n)h](j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]jl)}j_jKsbc.refcount_set_releaseasbuh1hhjaubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]ubj&)}(hint nh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]hn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]ubeh}(h]h ]h"]h$]h&]jj uh1jhj$hhhj6hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj6hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj6hKhjhhubj )}(hhh]j9)}(h,set a refcount's value with release orderingh]h.set a refcount’s value with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount ``int n`` value to which the refcount will be set **Description** This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones. This function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.h](j9)}(h**Parameters**h]jz)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjAh]h refcount_t *r}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj;ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhKhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhKhj8ubj)}(h2``int n`` value to which the refcount will be set h](j)}(h ``int n``h]j?)}(hjzh]hint n}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjtubj)}(hhh]j9)}(h'value to which the refcount will be seth]h'value to which the refcount will be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhj8ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hXProvides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones.h]hXProvides release memory ordering which will order previous memory operations against this store. This ensures all updates to this object are visible once the refcount is set and stale values from the object previously occupying this memory are overwritten with new ones.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hXThis function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.h]hXThis function should be called only after new object is fully initialized. After this call the object should be considered visible to other tasks even if it was not yet added into an object collection normally used to discover it. This is because other tasks might have discovered the object previously occupying the same memory and after memory reuse they can succeed in taking refcount to the new object and start using it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_read (C function)c.refcount_readhNtauh1hhjQhhhNhNubh)}(hhh](h)}(h0unsigned int refcount_read (const refcount_t *r)h]h)}(h/unsigned int refcount_read(const refcount_t *r)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj&hKubj)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj&hKubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj&hKubh)}(h refcount_readh]h)}(h refcount_readh]h refcount_read}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj&hKubj )}(h(const refcount_t *r)h]j&)}(hconst refcount_t *rh](j+)}(hj<*h]hconst}(hjqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubh)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jWsbc.refcount_readasbuh1hhjmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj&hKhj hhubj )}(hhh]j9)}(hget a refcount's valueh]hget a refcount’s value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``const refcount_t *r`` the refcount **Return** the refcount's valueh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j)}(h%``const refcount_t *r`` the refcount h](j)}(h``const refcount_t *r``h]j?)}(hj4h]hconst refcount_t *r}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhj.ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hthe refcount's valueh]hthe refcount’s value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_add_not_zero (C function)c.refcount_add_not_zerohNtauh1hhjQhhhNhNubh)}(hhh](h)}(h1bool refcount_add_not_zero (int i, refcount_t *r)h]h)}(h0bool refcount_add_not_zero(int i, refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hrefcount_add_not_zeroh]h)}(hrefcount_add_not_zeroh]hrefcount_add_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, refcount_t *r)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hih]hi}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj*modnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_add_not_zeroasbuh1hhj!ubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hjh]hr}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h(add a value to a refcount unless it is 0h]h(add a value to a refcount unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``int i`` the value to add to the refcount ``refcount_t *r`` the refcount **Description** Will saturate at REFCOUNT_SATURATED and WARN. Provides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. Use of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count. **Return** false if the passed refcount is 0, true otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j9)}(h the value to add to the refcounth]h the value to add to the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(h-Will saturate at REFCOUNT_SATURATED and WARN.h]h-Will saturate at REFCOUNT_SATURATED and WARN.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubj9)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*refcount_add_not_zero_acquire (C function)c.refcount_add_not_zero_acquirehNtauh1hhjQhhhNhNubh)}(hhh](h)}(h9bool refcount_add_not_zero_acquire (int i, refcount_t *r)h]h)}(h8bool refcount_add_not_zero_acquire(int i, refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hrefcount_add_not_zero_acquireh]h)}(hrefcount_add_not_zero_acquireh]hrefcount_add_not_zero_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, refcount_t *r)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj@modnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_add_not_zero_acquireasbuh1hhj7ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hjh]hr}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h>add a value to a refcount with acquire ordering unless it is 0h]h>add a value to a refcount with acquire ordering unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX?**Parameters** ``int i`` the value to add to the refcount ``refcount_t *r`` the refcount **Description** Will saturate at REFCOUNT_SATURATED and WARN. This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. Use of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count. **Return** false if the passed refcount is 0, true otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j9)}(h the value to add to the refcounth]h the value to add to the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(h-Will saturate at REFCOUNT_SATURATED and WARN.h]h-Will saturate at REFCOUNT_SATURATED and WARN.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc_not_zero_acquire() should instead be used to increment a reference count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_add (C function)c.refcount_addhNtauh1hhjQhhhNhNubh)}(hhh](h)}(h(void refcount_add (int i, refcount_t *r)h]h)}(h'void refcount_add(int i, refcount_t *r)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM'ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM'ubh)}(h refcount_addh]h)}(h refcount_addh]h refcount_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM'ubj )}(h(int i, refcount_t *r)h](j&)}(hint ih](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubh)}(hjh]hi}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubj&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjfmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_addasbuh1hhj]ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM'hjhhubj )}(hhh]j9)}(hadd a value to a refcounth]hadd a value to a refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM'hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``int i`` the value to add to the refcount ``refcount_t *r`` the refcount **Description** Similar to atomic_add(), but will saturate at REFCOUNT_SATURATED and WARN. Provides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. Use of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM+hjubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]j?)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM(hjubj)}(hhh]j9)}(h the value to add to the refcounth]h the value to add to the refcount}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjBh]h refcount_t *r}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM)hj<ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM)hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM)hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM+hjubj9)}(hJSimilar to atomic_add(), but will saturate at REFCOUNT_SATURATED and WARN.h]hJSimilar to atomic_add(), but will saturate at REFCOUNT_SATURATED and WARN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM*hjubj9)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM,hjubj9)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_inc(), or one of its variants, should instead be used to increment a reference count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_inc_not_zero (C function)c.refcount_inc_not_zerohNtauh1hhjQhhhNhNubh)}(hhh](h)}(h*bool refcount_inc_not_zero (refcount_t *r)h]h)}(h)bool refcount_inc_not_zero(refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMAubh)}(hrefcount_inc_not_zeroh]h)}(hrefcount_inc_not_zeroh]hrefcount_inc_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMAubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_inc_not_zeroasbuh1hhjubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMAubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMAhjhhubj )}(hhh]j9)}(h#increment a refcount unless it is 0h]h#increment a refcount unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount to increment **Description** Similar to atomic_inc_not_zero(), but will saturate at REFCOUNT_SATURATED and WARN. Provides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. **Return** true if the increment was successful, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMEhjubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMBhjubj)}(hhh]j9)}(hthe refcount to incrementh]hthe refcount to increment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMDhjubj9)}(hSSimilar to atomic_inc_not_zero(), but will saturate at REFCOUNT_SATURATED and WARN.h]hSSimilar to atomic_inc_not_zero(), but will saturate at REFCOUNT_SATURATED and WARN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMChjubj9)}(hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMFhjubj9)}(h **Return**h]jz)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMJhjubj9)}(h5true if the increment was successful, false otherwiseh]h5true if the increment was successful, false otherwise}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*refcount_inc_not_zero_acquire (C function)c.refcount_inc_not_zero_acquirehNtauh1hhjQhhhNhNubh)}(hhh](h)}(h2bool refcount_inc_not_zero_acquire (refcount_t *r)h]h)}(h1bool refcount_inc_not_zero_acquire(refcount_t *r)h](j)}(hjh]hbool}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMXubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvhhhjhMXubh)}(hrefcount_inc_not_zero_acquireh]h)}(hrefcount_inc_not_zero_acquireh]hrefcount_inc_not_zero_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjvhhhjhMXubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_inc_not_zero_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjvhhhjhMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjhMXubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1hhjhMXhjohhubj )}(hhh]j9)}(h9increment a refcount with acquire ordering unless it is 0h]h9increment a refcount with acquire ordering unless it is 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMXubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhjQhNhNubjp)}(hXS**Parameters** ``refcount_t *r`` the refcount to increment **Description** Similar to refcount_inc_not_zero(), but provides acquire memory ordering on success. This function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU. Provides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top. **Return** true if the increment was successful, false otherwiseh](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM\hj9ubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]j?)}(hj^h]h refcount_t *r}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMYhjXubj)}(hhh]j9)}(hthe refcount to incrementh]hthe refcount to increment}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMYhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMYhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM[hj9ubj9)}(hTSimilar to refcount_inc_not_zero(), but provides acquire memory ordering on success.h]hTSimilar to refcount_inc_not_zero(), but provides acquire memory ordering on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMZhj9ubj9)}(hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.h]hThis function should be used when memory occupied by the object might be reused to store another object -- consider SLAB_TYPESAFE_BY_RCU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM]hj9ubj9)}(hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.h]hProvides acquire memory ordering on success, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM`hj9ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMdhj9ubj9)}(h5true if the increment was successful, false otherwiseh]h5true if the increment was successful, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMehj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_inc (C function)c.refcount_inchNtauh1hhjQhhhNhNubh)}(hhh](h)}(h!void refcount_inc (refcount_t *r)h]h)}(h void refcount_inc(refcount_t *r)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMrubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj1hMrubh)}(h refcount_inch]h)}(h refcount_inch]h refcount_inc}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj1hMrubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jFsbc.refcount_incasbuh1hhj\ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj1hMrubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hMrubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj1hMrhjhhubj )}(hhh]j9)}(hincrement a refcounth]hincrement a refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMrhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMrubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hXQ**Parameters** ``refcount_t *r`` the refcount to increment **Description** Similar to atomic_inc(), but will saturate at REFCOUNT_SATURATED and WARN. Provides no memory ordering, it is assumed the caller already has a reference on the object. Will WARN if the refcount is 0, as this represents a possible use-after-free condition.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMvhjubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMshjubj)}(hhh]j9)}(hthe refcount to incrementh]hthe refcount to increment}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMuhjubj9)}(hJSimilar to atomic_inc(), but will saturate at REFCOUNT_SATURATED and WARN.h]hJSimilar to atomic_inc(), but will saturate at REFCOUNT_SATURATED and WARN.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMthjubj9)}(h\Provides no memory ordering, it is assumed the caller already has a reference on the object.h]h\Provides no memory ordering, it is assumed the caller already has a reference on the object.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMvhjubj9)}(hWWill WARN if the refcount is 0, as this represents a possible use-after-free condition.h]hWWill WARN if the refcount is 0, as this represents a possible use-after-free condition.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_sub_and_test (C function)c.refcount_sub_and_testhNtauh1hhjQhhhNhNubh)}(hhh](h)}(h1bool refcount_sub_and_test (int i, refcount_t *r)h]h)}(h0bool refcount_sub_and_test(int i, refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hrefcount_sub_and_testh]h)}(hrefcount_sub_and_testh]hrefcount_sub_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, refcount_t *r)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_sub_and_testasbuh1hhjubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h,subtract from a refcount and test if it is 0h]h,subtract from a refcount and test if it is 0}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``int i`` amount to subtract from the refcount ``refcount_t *r`` the refcount **Description** Similar to atomic_dec_and_test(), but it will WARN, return false and ultimately leak on underflow and will fail to decrement when saturated at REFCOUNT_SATURATED. Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after. Use of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_dec(), or one of its variants, should instead be used to decrement a reference count. **Return** true if the resulting refcount is 0, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh](j)}(h/``int i`` amount to subtract from the refcount h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j9)}(h$amount to subtract from the refcounth]h$amount to subtract from the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hSimilar to atomic_dec_and_test(), but it will WARN, return false and ultimately leak on underflow and will fail to decrement when saturated at REFCOUNT_SATURATED.h]hSimilar to atomic_dec_and_test(), but it will WARN, return false and ultimately leak on underflow and will fail to decrement when saturated at REFCOUNT_SATURATED.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_dec(), or one of its variants, should instead be used to decrement a reference count.h]hUse of this function is not recommended for the normal reference counting use case in which references are taken and released one at a time. In these cases, refcount_dec(), or one of its variants, should instead be used to decrement a reference count.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(h **Return**h]jz)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_dec_and_test (C function)c.refcount_dec_and_testhNtauh1hhjQhhhNhNubh)}(hhh](h)}(h*bool refcount_dec_and_test (refcount_t *r)h]h)}(h)bool refcount_dec_and_test(refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hrefcount_dec_and_testh]h)}(hrefcount_dec_and_testh]hrefcount_dec_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_dec_and_testasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h(decrement a refcount and test if it is 0h]h(decrement a refcount and test if it is 0}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount **Description** Similar to atomic_dec_and_test(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED. Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after. **Return** true if the resulting refcount is 0, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubj9)}(hwSimilar to atomic_dec_and_test(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]hwSimilar to atomic_dec_and_test(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubj9)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubj9)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌrefcount_dec (C function)c.refcount_dechNtauh1hhjQhhhNhNubh)}(hhh](h)}(h!void refcount_dec (refcount_t *r)h]h)}(h void refcount_dec(refcount_t *r)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjdhMubh)}(h refcount_dech]h)}(h refcount_dech]h refcount_dec}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjdhMubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jysbc.refcount_decasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjRhhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjdhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhjdhMhjKhhubj )}(hhh]j9)}(hdecrement a refcounth]hdecrement a refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount **Description** Similar to atomic_dec(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED. Provides release memory ordering, such that prior loads and stores are done before.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hj;h]h refcount_t *r}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj5ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hnSimilar to atomic_dec(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]hnSimilar to atomic_dec(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubj9)}(hSProvides release memory ordering, such that prior loads and stores are done before.h]hSProvides release memory ordering, such that prior loads and stores are done before.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ refcount_dec_if_one (C function)c.refcount_dec_if_onehNtauh1hhjQhhhNhNubh)}(hhh](h)}(h(bool refcount_dec_if_one (refcount_t *r)h]h)}(h'bool refcount_dec_if_one(refcount_t *r)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhK(ubh)}(hrefcount_dec_if_oneh]h)}(hrefcount_dec_if_oneh]hrefcount_dec_if_one}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK(ubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_dec_if_oneasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK(hjhhubj )}(hhh]j9)}(hdecrement a refcount if it is 1h]hdecrement a refcount if it is 1}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(hjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount **Description** No atomic_t counterpart, it attempts a 1 -> 0 transition and returns the success thereof. Like all decrement operations, it provides release memory order and provides a control dependency. It can be used like a try-delete operator; this explicit case is provided and not cmpxchg in generic, because that would allow implementing unsafe operations. **Return** true if the resulting refcount is 0, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK,hjubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK)hjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK+hjubj9)}(hYNo atomic_t counterpart, it attempts a 1 -> 0 transition and returns the success thereof.h]hYNo atomic_t counterpart, it attempts a 1 -> 0 transition and returns the success thereof.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK*hjubj9)}(hbLike all decrement operations, it provides release memory order and provides a control dependency.h]hbLike all decrement operations, it provides release memory order and provides a control dependency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK-hjubj9)}(hIt can be used like a try-delete operator; this explicit case is provided and not cmpxchg in generic, because that would allow implementing unsafe operations.h]hIt can be used like a try-delete operator; this explicit case is provided and not cmpxchg in generic, because that would allow implementing unsafe operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK0hjubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK4hjubj9)}(h4true if the resulting refcount is 0, false otherwiseh]h4true if the resulting refcount is 0, false otherwise}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!refcount_dec_not_one (C function)c.refcount_dec_not_onehNtauh1hhjQhhhNhNubh)}(hhh](h)}(h)bool refcount_dec_not_one (refcount_t *r)h]h)}(h(bool refcount_dec_not_one(refcount_t *r)h](j)}(hjh]hbool}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK@ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjohhhjhK@ubh)}(hrefcount_dec_not_oneh]h)}(hrefcount_dec_not_oneh]hrefcount_dec_not_one}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjhK@ubj )}(h(refcount_t *r)h]j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_dec_not_oneasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjohhhjhK@ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjhK@ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1hhjhK@hjhhhubj )}(hhh]j9)}(h#decrement a refcount if it is not 1h]h#decrement a refcount if it is not 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK@hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhK@ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.j4j.j5j6j7uh1hhhhjQhNhNubjp)}(hX/**Parameters** ``refcount_t *r`` the refcount **Description** No atomic_t counterpart, it decrements unless the value is 1, in which case it will return false. Was often done like: atomic_add_unless(:c:type:`var`, -1, 1) **Return** true if the decrement operation was successful, false otherwiseh](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKDhj2ubj)}(hhh]j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjWh]h refcount_t *r}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKAhjQubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhKAhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKAhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKChj2ubj9)}(haNo atomic_t counterpart, it decrements unless the value is 1, in which case it will return false.h]haNo atomic_t counterpart, it decrements unless the value is 1, in which case it will return false.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKBhj2ubj9)}(hhjubah}(h]h ]h"]h$]h&]refdocj refdomainj-reftypetype refexplicitrefwarnjcjjvaruh1hhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKEhjubh, -1, 1)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhKEhj2ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKGhj2ubj9)}(h?true if the decrement operation was successful, false otherwiseh]h?true if the decrement operation was successful, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKHhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(refcount_dec_and_mutex_lock (C function)c.refcount_dec_and_mutex_lockhNtauh1hhjQhhhNhNubh)}(hhh](h)}(hDbool refcount_dec_and_mutex_lock (refcount_t *r, struct mutex *lock)h]h)}(hCbool refcount_dec_and_mutex_lock(refcount_t *r, struct mutex *lock)h](j)}(hjh]hbool}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKbubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj=hKbubh)}(hrefcount_dec_and_mutex_lockh]h)}(hrefcount_dec_and_mutex_lockh]hrefcount_dec_and_mutex_lock}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj=hKbubj )}(h#(refcount_t *r, struct mutex *lock)h](j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjqmodnameN classnameNjcjf)}ji]jl)}j_jRsbc.refcount_dec_and_mutex_lockasbuh1hhjhubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjdubj&)}(hstruct mutex *lockh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hmutexh]hmutex}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.refcount_dec_and_mutex_lockasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlockh]hlock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjdubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj=hKbubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj=hKbubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj=hKbhj%hhubj )}(hhh]j9)}(h7return holding mutex if able to decrement refcount to 0h]h7return holding mutex if able to decrement refcount to 0}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKbhj@hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj=hKbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j[j4j[j5j6j7uh1hhhhjQhNhNubjp)}(hX**Parameters** ``refcount_t *r`` the refcount ``struct mutex *lock`` the mutex to be locked **Description** Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED. Provides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top. **Return** true and hold mutex if able to decrement refcount to 0, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKfhj_ubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hjh]h refcount_t *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKdhj~ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKdhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKdhj{ubj)}(h.``struct mutex *lock`` the mutex to be locked h](j)}(h``struct mutex *lock``h]j?)}(hjh]hstruct mutex *lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKehjubj)}(hhh]j9)}(hthe mutex to be lockedh]hthe mutex to be locked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKehj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKghj_ubj9)}(h}Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]h}Similar to atomic_dec_and_mutex_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKfhj_ubj9)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.Ih]hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKihj_ubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKmhj_ubj9)}(hGtrue and hold mutex if able to decrement refcount to 0, false otherwiseh]hGtrue and hold mutex if able to decrement refcount to 0, false otherwise}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKnhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"refcount_dec_and_lock (C function)c.refcount_dec_and_lockhNtauh1hhjQhhhNhNubh)}(hhh](h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``spinlock_t *lock`` the spinlock to be locked h](j)}(h``spinlock_t *lock``h]j?)}(hjh]hspinlock_t *lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj)}(hhh]j9)}(hthe spinlock to be lockedh]hthe spinlock to be locked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj9)}(hwSimilar to atomic_dec_and_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.h]hwSimilar to atomic_dec_and_lock(), it will WARN on underflow and fail to decrement when saturated at REFCOUNT_SATURATED.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj9)}(hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.h]hProvides release memory ordering, such that prior loads and stores are done before, and provides a control dependency such that free() must come after. See the comment on top.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj9)}(hJtrue and hold spinlock if able to decrement refcount to 0, false otherwiseh]hJtrue and hold spinlock if able to decrement refcount to 0, false otherwise}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*refcount_dec_and_lock_irqsave (C function)c.refcount_dec_and_lock_irqsavehNtauh1hhjQhhhNhNubh)}(hhh](h)}(hZbool refcount_dec_and_lock_irqsave (refcount_t *r, spinlock_t *lock, unsigned long *flags)h]h)}(hYbool refcount_dec_and_lock_irqsave(refcount_t *r, spinlock_t *lock, unsigned long *flags)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hrefcount_dec_and_lock_irqsaveh]h)}(hrefcount_dec_and_lock_irqsaveh]hrefcount_dec_and_lock_irqsave}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h7(refcount_t *r, spinlock_t *lock, unsigned long *flags)h](j&)}(h refcount_t *rh](h)}(hhh]h)}(h refcount_th]h refcount_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.refcount_dec_and_lock_irqsaveasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hspinlock_t *lockh](h)}(hhh]h)}(h spinlock_th]h spinlock_t}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jc.refcount_dec_and_lock_irqsaveasbuh1hhj)ubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hlockh]hlock}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned long *flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hSreturn holding spinlock with disabled interrupts if able to decrement refcount to 0h]hSreturn holding spinlock with disabled interrupts if able to decrement refcount to 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjQhNhNubjp)}(hXp**Parameters** ``refcount_t *r`` the refcount ``spinlock_t *lock`` the spinlock to be locked ``unsigned long *flags`` saved IRQ-flags if the is acquired **Description** Same as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts. **Return** true and hold spinlock if able to decrement refcount to 0, false otherwiseh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj ubj)}(hhh](j)}(h``refcount_t *r`` the refcount h](j)}(h``refcount_t *r``h]j?)}(hj2h]h refcount_t *r}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj,ubj)}(hhh]j9)}(h the refcounth]h the refcount}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj)ubj)}(h/``spinlock_t *lock`` the spinlock to be locked h](j)}(h``spinlock_t *lock``h]j?)}(hjkh]hspinlock_t *lock}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjeubj)}(hhh]j9)}(hthe spinlock to be lockedh]hthe spinlock to be locked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhKhj)ubj)}(h<``unsigned long *flags`` saved IRQ-flags if the is acquired h](j)}(h``unsigned long *flags``h]j?)}(hjh]hunsigned long *flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubj)}(hhh]j9)}(h"saved IRQ-flags if the is acquiredh]h"saved IRQ-flags if the is acquired}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj ubj9)}(hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.h]hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj ubj9)}(hJtrue and hold spinlock if able to decrement refcount to 0, false otherwiseh]hJtrue and hold spinlock if able to decrement refcount to 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjQhhhNhNubeh}(h]reference-countingah ]h"]reference countingah$]h&]uh1hhhhhhhhKUubh)}(hhh](h)}(hAtomicsh]hAtomics}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhK^ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_read (C function) c.atomic_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h#int atomic_read (const atomic_t *v)h]h)}(h"int atomic_read(const atomic_t *v)h](j)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhjrhKubh)}(h atomic_readh]h)}(h atomic_readh]h atomic_read}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjrhKubj )}(h(const atomic_t *v)h]j&)}(hconst atomic_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_readasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hvh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj`hhhjrhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhjrhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1hhjrhKhjYhhubj )}(hhh]j9)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj!hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j<j4j<j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_read() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]j?)}(hjeh]hconst atomic_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj_ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubj9)}(h;Unsafe to use in noinstr code; use raw_atomic_read() there.h]h;Unsafe to use in noinstr code; use raw_atomic_read() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_read_acquire (C function)c.atomic_read_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_read_acquire (const atomic_t *v)h]h)}(h*int atomic_read_acquire(const atomic_t *v)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%ubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;hhhjMhK%ubh)}(hatomic_read_acquireh]h)}(hatomic_read_acquireh]hatomic_read_acquire}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhjMhK%ubj )}(h(const atomic_t *v)h]j&)}(hconst atomic_t *vh](j+)}(hj<*h]hconst}(hj|hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjxubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubh)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jbsbc.atomic_read_acquireasbuh1hhjxubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjtubah}(h]h ]h"]h$]h&]jj uh1jhj;hhhjMhK%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhjMhK%ubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1hhjMhK%hj4hhubj )}(hhh]j9)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%hjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhK%ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_read_acquire() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]j?)}(hj?h]hconst atomic_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK&hj9ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThK&hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThK&hj6ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK(hjubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK'hjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.h]hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK+hjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_set (C function) c.atomic_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h$void atomic_set (atomic_t *v, int i)h]h)}(h#void atomic_set(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6ubj=)}(h h]h }(hj( hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj' hK6ubh)}(h atomic_seth]h)}(h atomic_seth]h atomic_set}(hj: hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6 ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj' hK6ubj )}(h(atomic_t *v, int i)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjY hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[ modnameN classnameNjcjf)}ji]jl)}j_j< sb c.atomic_setasbuh1hhjR ubj=)}(h h]h }(hjy hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN ubj&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN ubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj' hK6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj' hK6ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj' hK6hj hhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj' hK6ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_set() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj2 h]h atomic_t *v}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0 ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK7hj, ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjG hK7hjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhjG hK7hj) ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j?)}(hjk h]hint i}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hji ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK8hje ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hK8hj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jhj hK8hj) ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj ubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to }(hj hhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK9hj ubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_set() there.h]h:Unsafe to use in noinstr code; use raw_atomic_set() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK;hj ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK=hj ubj9)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK>hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_set_release (C function)c.atomic_set_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void atomic_set_release (atomic_t *v, int i)h]h)}(h+void atomic_set_release(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hjE hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHubj=)}(h h]h }(hjT hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjA hhhjS hKHubh)}(hatomic_set_releaseh]h)}(hatomic_set_releaseh]hatomic_set_release}(hjf hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjA hhhjS hKHubj )}(h(atomic_t *v, int i)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jh sbc.atomic_set_releaseasbuh1hhj~ ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjz ubj&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjz ubeh}(h]h ]h"]h$]h&]jj uh1jhjA hhhjS hKHubeh}(h]h ]h"]h$]h&]jj juh1hjjhj= hhhjS hKHubah}(h]j8 ah ](jjeh"]h$]h&]jj)jhuh1hhjS hKHhj: hhubj )}(hhh]j9)}(h atomic set with release orderingh]h atomic set with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHhj hhubah}(h]h ]h"]h$]h&]uh1jhj: hhhjS hKHubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5 j4j5 j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with release ordering. Unsafe to use in noinstr code; use raw_atomic_set_release() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj? h]h Parameters}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj= ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhj9 ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj^ h]h atomic_t *v}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKIhjX ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjs hKIhjt ubah}(h]h ]h"]h$]h&]uh1jhjX ubeh}(h]h ]h"]h$]h&]uh1jhjs hKIhjU ubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j?)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKJhj ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKJhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKJhjU ubeh}(h]h ]h"]h$]h&]uh1jhj9 ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhj9 ubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to }(hj hhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKKhj9 ubj9)}(hBUnsafe to use in noinstr code; use raw_atomic_set_release() there.h]hBUnsafe to use in noinstr code; use raw_atomic_set_release() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKMhj9 ubj9)}(h **Return**h]jz)}(hj, h]hReturn}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj* ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKOhj9 ubj9)}(hNothing.h]hNothing.}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKPhj9 ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add (C function) c.atomic_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h$void atomic_add (int i, atomic_t *v)h]h)}(h#void atomic_add(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjm hhhj hK[ubh)}(h atomic_addh]h)}(h atomic_addh]h atomic_add}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjm hhhj hK[ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sb c.atomic_addasbuh1hhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjm hhhj hK[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhji hhhj hK[ubah}(h]jd ah ](jjeh"]h$]h&]jj)jhuh1hhj hK[hjf hhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[hjFhhubah}(h]h ]h"]h$]h&]uh1jhjf hhhj hK[ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_add() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hjeubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK\hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK]hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_hjeubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK^hjeubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_add() there.h]h:Unsafe to use in noinstr code; use raw_atomic_add() there.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK`hjeubj9)}(h **Return**h]jz)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKbhjeubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKchjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add_return (C function)c.atomic_add_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_add_return (int i, atomic_t *v)h]h)}(h)int atomic_add_return(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKmubh)}(hatomic_add_returnh]h)}(hatomic_add_returnh]hatomic_add_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKmubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_add_returnasbuh1hhjubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKmhjhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKmubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_add_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKnhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKohjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjRhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh to (}(hjRhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh + }(hjRhhhNhNubjz)}(h**i**h]hi}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh) with full ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKphjubj9)}(hAUnsafe to use in noinstr code; use raw_atomic_add_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_add_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKrhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKthjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_acquire (C function)c.atomic_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h1int atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hKubh)}(hatomic_add_return_acquireh]h)}(hatomic_add_return_acquireh]hatomic_add_return_acquire}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubh)}(hjh]hi}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj4ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjumodnameN classnameNjcjf)}ji]jl)}j_j"sbc.atomic_add_return_acquireasbuh1hhjlubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj4ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hKhjhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjQh]h atomic_t *v}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjKubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_release (C function)c.atomic_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_add_return_release (int i, atomic_t *v)h]h)}(h1int atomic_add_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKhhhj]hKubh)}(hatomic_add_return_releaseh]h)}(hatomic_add_return_releaseh]hatomic_add_return_release}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj]hKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jrsbc.atomic_add_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjKhhhj]hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhj]hKubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhj]hKhjDhhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj$hhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjhh]hint i}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjbubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hKhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_release() there.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj^hhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_add_return_relaxed (C function)c.atomic_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_add_return_relaxed (int i, atomic_t *v)h]h)}(h1int atomic_add_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hatomic_add_return_relaxedh]h)}(hatomic_add_return_relaxedh]hatomic_add_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_add_return_relaxedasbuh1hhj ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjthhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjBhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh to (}(hjBhhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh + }(hjBhhhNhNubjz)}(h**i**h]hi}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh) with relaxed ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_add (C function)c.atomic_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h)int atomic_fetch_add (int i, atomic_t *v)h]h)}(h(int atomic_fetch_add(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hatomic_fetch_addh]h)}(hatomic_fetch_addh]hatomic_fetch_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubh)}(hjh]hi}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_fetch_addasbuh1hhj\ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjAh]h atomic_t *v}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj;ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhKhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_add() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_add() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_acquire (C function)c.atomic_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_add_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_add_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;hhhjMhKubh)}(hatomic_fetch_add_acquireh]h)}(hatomic_fetch_add_acquireh]hatomic_fetch_add_acquire}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhjMhKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjtubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jbsbc.atomic_fetch_add_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjtubeh}(h]h ]h"]h$]h&]jj uh1jhj;hhhjMhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhjMhKubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1hhjMhKhj4hhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjXh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjRubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjOubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubj9)}(h **Return**h]jz)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubj9)}(hThe original value of **v**.h](hThe original value of }(hjNhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_release (C function)c.atomic_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_add_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_add_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hatomic_fetch_add_releaseh]h)}(hatomic_fetch_add_releaseh]hatomic_fetch_add_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_fetch_add_releaseasbuh1hhjubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj2hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh to (}(hj2hhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh + }(hj2hhhNhNubjz)}(h**i**h]hi}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh) with release ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_release() there.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_add_relaxed (C function)c.atomic_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_add_relaxed (int i, atomic_t *v)h]h)}(h0int atomic_fetch_add_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hatomic_fetch_add_relaxedh]h)}(hatomic_fetch_add_relaxedh]hatomic_fetch_add_relaxed}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj* hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj8 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjS hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjU modnameN classnameNjcjf)}ji]jl)}j_j sbc.atomic_fetch_add_relaxedasbuh1hhjL ubj=)}(h h]h }(hjs hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjL ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj !hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj !hKhj ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj1!h]h atomic_t *v}(hj3!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/!ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj+!ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjJ!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjF!hKhjG!ubah}(h]h ]h"]h$]h&]uh1jhj+!ubeh}(h]h ]h"]h$]h&]uh1jhjF!hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjl!h]h Description}(hjn!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh to (}(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh + }(hj!hhhNhNubjz)}(h**i**h]hi}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh) with relaxed ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_relaxed() there.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj9)}(h **Return**h]jz)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_sub (C function) c.atomic_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h$void atomic_sub (int i, atomic_t *v)h]h)}(h#void atomic_sub(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj/"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj>"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+"hhhj="hMubh)}(h atomic_subh]h)}(h atomic_subh]h atomic_sub}(hjP"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+"hhhj="hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjl"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh"ubj=)}(h h]h }(hjz"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjh"ubh)}(hjh]hi}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjd"ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jl)}j_jR"sb c.atomic_subasbuh1hhj"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hjh]hv}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjd"ubeh}(h]h ]h"]h$]h&]jj uh1jhj+"hhhj="hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'"hhhj="hMubah}(h]j""ah ](jjeh"]h$]h&]jj)jhuh1hhj="hMhj$"hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj$"hhhj="hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j#j4j#j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_sub() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj)#h]h Parameters}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj##ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjH#h]hint i}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjF#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjB#ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hja#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]#hMhj^#ubah}(h]h ]h"]h$]h&]uh1jhjB#ubeh}(h]h ]h"]h$]h&]uh1jhj]#hMhj?#ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj#h]h atomic_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{#ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj{#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj?#ubeh}(h]h ]h"]h$]h&]uh1jhj##ubj9)}(h**Description**h]jz)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj##ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh to (}(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh - }(hj#hhhNhNubjz)}(h**i**h]hi}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh) with relaxed ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj##ubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_sub() there.h]h:Unsafe to use in noinstr code; use raw_atomic_sub() there.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj##ubj9)}(h **Return**h]jz)}(hj($h]hReturn}(hj*$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&$ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj##ubj9)}(hNothing.h]hNothing.}(hj>$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj##ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_sub_return (C function)c.atomic_sub_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_sub_return (int i, atomic_t *v)h]h)}(h)int atomic_sub_return(int i, atomic_t *v)h](j)}(hinth]hint}(hjm$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj|$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hji$hhhj{$hMubh)}(hatomic_sub_returnh]h)}(hatomic_sub_returnh]hatomic_sub_return}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhji$hhhj{$hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubh)}(hjh]hi}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$modnameN classnameNjcjf)}ji]jl)}j_j$sbc.atomic_sub_returnasbuh1hhj$ubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hjh]hv}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubeh}(h]h ]h"]h$]h&]jj uh1jhji$hhhj{$hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhje$hhhj{$hMubah}(h]j`$ah ](jjeh"]h$]h&]jj)jhuh1hhj{$hMhjb$hhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjE%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjB%hhubah}(h]h ]h"]h$]h&]uh1jhjb$hhhj{$hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]%j4j]%j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjg%h]h Parameters}(hji%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj%h]hint i}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj}%ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj%h]h atomic_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj}%ubeh}(h]h ]h"]h$]h&]uh1jhja%ubj9)}(h**Description**h]jz)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj&hhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh to (}(hj&hhhNhNubjz)}(h**v**h]hv}(hj*&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh - }(hj&hhhNhNubjz)}(h**i**h]hi}(hj<&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh) with full ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubj9)}(hAUnsafe to use in noinstr code; use raw_atomic_sub_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_sub_return() there.}(hjU&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubj9)}(h **Return**h]jz)}(hjf&h]hReturn}(hjh&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjd&ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj|&hhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|&ubh.}(hj|&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhja%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_acquire (C function)c.atomic_sub_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_sub_return_acquire (int i, atomic_t *v)h]h)}(h1int atomic_sub_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&hhhj&hM&ubh)}(hatomic_sub_return_acquireh]h)}(hatomic_sub_return_acquireh]hatomic_sub_return_acquire}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj&hM&ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hjh]hi}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj1'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3'modnameN classnameNjcjf)}ji]jl)}j_j&sbc.atomic_sub_return_acquireasbuh1hhj*'ubj=)}(h h]h }(hjQ'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*'ubj)}(hjh]h*}(hj_'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*'ubh)}(hjh]hv}(hjl'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubeh}(h]h ]h"]h$]h&]jj uh1jhj&hhhj&hM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj&hM&ubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhj&hM&hj&hhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hM&ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'j4j'j5j6j7uh1hhhhj:hNhNubjp)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hj'ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj'h]hint i}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hj'ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hM'hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM'hj'ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj(h]h atomic_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj (ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hj (ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj((hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$(hM(hj%(ubah}(h]h ]h"]h$]h&]uh1jhj (ubeh}(h]h ]h"]h$]h&]uh1jhj$(hM(hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hjJ(h]h Description}(hjL(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hj'ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj`(hhhNhNubjz)}(h**v**h]hv}(hjh(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`(ubh to (}(hj`(hhhNhNubjz)}(h**v**h]hv}(hjz(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`(ubh - }(hj`(hhhNhNubjz)}(h**i**h]hi}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`(ubh) with acquire ordering.}(hj`(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hj'ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hj'ubj9)}(h **Return**h]jz)}(hj(h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hj'ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj(hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_release (C function)c.atomic_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_sub_return_release (int i, atomic_t *v)h]h)}(h1int atomic_sub_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj )hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj )hhhj)hM8ubh)}(hatomic_sub_return_releaseh]h)}(hatomic_sub_return_releaseh]hatomic_sub_return_release}(hj.)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj )hhhj)hM8ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjJ)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF)ubj=)}(h h]h }(hjX)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjF)ubh)}(hjh]hi}(hjf)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjB)ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_j0)sbc.atomic_sub_return_releaseasbuh1hhjz)ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjz)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz)ubh)}(hjh]hv}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjB)ubeh}(h]h ]h"]h$]h&]jj uh1jhj )hhhj)hM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj)hM8ubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhj)hM8hj)hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hj)hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hM8ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j)j4j)j5j6j7uh1hhhhj:hNhNubjp)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj*ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj&*h]hint i}(hj(*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj *ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj?*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;*hM9hj<*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ]h"]h$]h&]uh1jhj;*hM9hj*ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj_*h]h atomic_t *v}(hja*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjY*ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjx*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjt*hM:hju*ubah}(h]h ]h"]h$]h&]uh1jhjY*ubeh}(h]h ]h"]h$]h&]uh1jhjt*hM:hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj*ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj*hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh to (}(hj*hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh - }(hj*hhhNhNubjz)}(h**i**h]hi}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh) with release ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj*ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_release() there.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hj*ubj9)}(h **Return**h]jz)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hj*ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj+hhhNhNubjz)}(h**v**h]hv}(hj$+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_sub_return_relaxed (C function)c.atomic_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_sub_return_relaxed (int i, atomic_t *v)h]h)}(h1int atomic_sub_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj]+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubj=)}(h h]h }(hjl+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjY+hhhjk+hMKubh)}(hatomic_sub_return_relaxedh]h)}(hatomic_sub_return_relaxedh]hatomic_sub_return_relaxed}(hj~+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjY+hhhjk+hMKubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+ubh)}(hjh]hi}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+modnameN classnameNjcjf)}ji]jl)}j_j+sbc.atomic_sub_return_relaxedasbuh1hhj+ubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hjh]hv}(hj ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubeh}(h]h ]h"]h$]h&]jj uh1jhjY+hhhjk+hMKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjU+hhhjk+hMKubah}(h]jP+ah ](jjeh"]h$]h&]jj)jhuh1hhjk+hMKhjR+hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj5,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj2,hhubah}(h]h ]h"]h$]h&]uh1jhjR+hhhjk+hMKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jM,j4jM,j5j6j7uh1hhhhj:hNhNubjp)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjW,h]h Parameters}(hjY,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU,ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjQ,ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjv,h]hint i}(hjx,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjt,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjp,ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMLhj,ubah}(h]h ]h"]h$]h&]uh1jhjp,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMLhjm,ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj,h]h atomic_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhj,ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMMhjm,ubeh}(h]h ]h"]h$]h&]uh1jhjQ,ubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjQ,ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh to (}(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh - }(hj-hhhNhNubjz)}(h**i**h]hi}(hj,-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh) with relaxed ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjQ,ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there.}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjQ,ubj9)}(h **Return**h]jz)}(hjV-h]hReturn}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjQ,ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjl-hhhNhNubjz)}(h**v**h]hv}(hjt-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl-ubh.}(hjl-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjQ,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_sub (C function)c.atomic_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h)int atomic_fetch_sub (int i, atomic_t *v)h]h)}(h(int atomic_fetch_sub(int i, atomic_t *v)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-hhhj-hM]ubh)}(hatomic_fetch_subh]h)}(hatomic_fetch_subh]hatomic_fetch_sub}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhhj-hM]ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hjh]hi}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj!.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#.modnameN classnameNjcjf)}ji]jl)}j_j-sbc.atomic_fetch_subasbuh1hhj.ubj=)}(h h]h }(hjA.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubj)}(hjh]h*}(hjO.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hjh]hv}(hj\.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-ubeh}(h]h ]h"]h$]h&]jj uh1jhj-hhhj-hM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhj-hM]ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1hhj-hM]hj-hhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hM]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.j4j.j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_sub() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj.ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj.h]hint i}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hj.ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hM^hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM^hj.ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj.h]h atomic_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hj.ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hM_hj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hM_hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hj:/h]h Description}(hjhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj1ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj/1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+1hMqhj,1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj+1hMqhj 1ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjO1h]h atomic_t *v}(hjQ1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjM1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjI1ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjh1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjd1hMrhje1ubah}(h]h ]h"]h$]h&]uh1jhjI1ubeh}(h]h ]h"]h$]h&]uh1jhjd1hMrhj 1ubeh}(h]h ]h"]h$]h&]uh1jhj0ubj9)}(h**Description**h]jz)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthj0ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj1hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh to (}(hj1hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh - }(hj1hhhNhNubjz)}(h**i**h]hi}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh) with acquire ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj0ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_acquire() there.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhj0ubj9)}(h **Return**h]jz)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhj0ubj9)}(hThe original value of **v**.h](hThe original value of }(hj 2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 2ubh.}(hj 2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_sub_release (C function)c.atomic_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_sub_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_sub_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjM2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj\2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjI2hhhj[2hMubh)}(hatomic_fetch_sub_releaseh]h)}(hatomic_fetch_sub_releaseh]hatomic_fetch_sub_release}(hjn2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjI2hhhj[2hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubh)}(hjh]hi}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jl)}j_jp2sbc.atomic_fetch_sub_releaseasbuh1hhj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hjh]hv}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhjI2hhhj[2hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjE2hhhj[2hMubah}(h]j@2ah ](jjeh"]h$]h&]jj)jhuh1hhj[2hMhjB2hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj%3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"3hhubah}(h]h ]h"]h$]h&]uh1jhjB2hhhj[2hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j=3j4j=3j5j6j7uh1hhhhj:hNhNubjp)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_sub_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjG3h]h Parameters}(hjI3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE3ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjf3h]hint i}(hjh3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjd3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`3ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{3hMhj|3ubah}(h]h ]h"]h$]h&]uh1jhj`3ubeh}(h]h ]h"]h$]h&]uh1jhj{3hMhj]3ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj3h]h atomic_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj]3ubeh}(h]h ]h"]h$]h&]uh1jhjA3ubj9)}(h**Description**h]jz)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj3hhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh to (}(hj3hhhNhNubjz)}(h**v**h]hv}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh - }(hj3hhhNhNubjz)}(h**i**h]hi}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh) with release ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_release() there.}(hj54hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubj9)}(h **Return**h]jz)}(hjF4h]hReturn}(hjH4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubj9)}(hThe original value of **v**.h](hThe original value of }(hj\4hhhNhNubjz)}(h**v**h]hv}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\4ubh.}(hj\4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_sub_relaxed (C function)c.atomic_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_sub_relaxed (int i, atomic_t *v)h]h)}(h0int atomic_fetch_sub_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4hhhj4hMubh)}(hatomic_fetch_sub_relaxedh]h)}(hatomic_fetch_sub_relaxedh]hatomic_fetch_sub_relaxed}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhj4hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4ubh)}(hjh]hi}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj4ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jl)}j_j4sbc.atomic_fetch_sub_relaxedasbuh1hhj 5ubj=)}(h h]h }(hj15hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj 5ubj)}(hjh]h*}(hj?5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5ubh)}(hjh]hv}(hjL5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj4ubeh}(h]h ]h"]h$]h&]jj uh1jhj4hhhj4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj4hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhj4hMhj4hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hju5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjr5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj:hNhNubjp)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_sub_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj5h]hint i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj5h]h atomic_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj9)}(h**Description**h]jz)}(hj*6h]h Description}(hj,6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj@6hhhNhNubjz)}(h**v**h]hv}(hjH6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@6ubh to (}(hj@6hhhNhNubjz)}(h**v**h]hv}(hjZ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@6ubh - }(hj@6hhhNhNubjz)}(h**i**h]hi}(hjl6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@6ubh) with relaxed ordering.}(hj@6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_relaxed() there.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj9)}(h **Return**h]jz)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj9)}(hThe original value of **v**.h](hThe original value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_inc (C function) c.atomic_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(hvoid atomic_inc (atomic_t *v)h]h)}(hvoid atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6hhhj6hMubh)}(h atomic_inch]h)}(h atomic_inch]h atomic_inc}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6hhhj6hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj-7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/7modnameN classnameNjcjf)}ji]jl)}j_j7sb c.atomic_incasbuh1hhj&7ubj=)}(h h]h }(hjM7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&7ubj)}(hjh]h*}(hj[7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&7ubh)}(hjh]hv}(hjh7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"7ubah}(h]h ]h"]h$]h&]jj uh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1hhj6hMhj6hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_inc() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj7h]h atomic_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubj9)}(h**Description**h]jz)}(hj 8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj#8hhhNhNubjz)}(h**v**h]hv}(hj+8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#8ubh to (}(hj#8hhhNhNubjz)}(h**v**h]hv}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#8ubh + 1) with relaxed ordering.}(hj#8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_inc() there.h]h:Unsafe to use in noinstr code; use raw_atomic_inc() there.}(hjV8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj9)}(h **Return**h]jz)}(hjg8h]hReturn}(hji8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubj9)}(hNothing.h]hNothing.}(hj}8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_inc_return (C function)c.atomic_inc_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h#int atomic_inc_return (atomic_t *v)h]h)}(h"int atomic_inc_return(atomic_t *v)h](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8hhhj8hMubh)}(hatomic_inc_returnh]h)}(hatomic_inc_returnh]hatomic_inc_return}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhj8hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8modnameN classnameNjcjf)}ji]jl)}j_j8sbc.atomic_inc_returnasbuh1hhj8ubj=)}(h h]h }(hj 9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hjh]hv}(hj'9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj8ubah}(h]h ]h"]h$]h&]jj uh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhj8hMhj8hhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjP9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jh9j4jh9j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjr9h]h Parameters}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjp9ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj9h]h atomic_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjl9ubj9)}(h**Description**h]jz)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh to (}(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh + 1) with full ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubj9)}(hAUnsafe to use in noinstr code; use raw_atomic_inc_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_inc_return() there.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubj9)}(h **Return**h]jz)}(hj&:h]hReturn}(hj(:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$:ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj<:hhhNhNubjz)}(h**v**h]hv}(hjD:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<:ubh.}(hj<:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_acquire (C function)c.atomic_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_acquire (atomic_t *v)h]h)}(h*int atomic_inc_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hj}:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjy:hhhj:hMubh)}(hatomic_inc_return_acquireh]h)}(hatomic_inc_return_acquireh]hatomic_inc_return_acquire}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjy:hhhj:hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jl)}j_j:sbc.atomic_inc_return_acquireasbuh1hhj:ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hjh]hv}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubah}(h]h ]h"]h$]h&]jj uh1jhjy:hhhj:hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhju:hhhj:hMubah}(h]jp:ah ](jjeh"]h$]h&]jj)jhuh1hhj:hMhjr:hhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj!;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhjr:hhhj:hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9;j4j9;j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjC;h]h Parameters}(hjE;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjA;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjb;h]h atomic_t *v}(hjd;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\;ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj{;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjw;hMhjx;ubah}(h]h ]h"]h$]h&]uh1jhj\;ubeh}(h]h ]h"]h$]h&]uh1jhjw;hMhjY;ubah}(h]h ]h"]h$]h&]uh1jhj=;ubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh to (}(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh + 1) with acquire ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubj9)}(h **Return**h]jz)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj <hhhNhNubjz)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj <ubh.}(hj <hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_release (C function)c.atomic_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_release (atomic_t *v)h]h)}(h*int atomic_inc_return_release(atomic_t *v)h](j)}(hinth]hint}(hjN<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj]<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJ<hhhj\<hMubh)}(hatomic_inc_return_releaseh]h)}(hatomic_inc_return_releaseh]hatomic_inc_return_release}(hjo<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJ<hhhj\<hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_jq<sbc.atomic_inc_return_releaseasbuh1hhj<ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hjh]hv}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubah}(h]h ]h"]h$]h&]jj uh1jhjJ<hhhj\<hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjF<hhhj\<hMubah}(h]jA<ah ](jjeh"]h$]h&]jj)jhuh1hhj\<hMhjC<hhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1jhjC<hhhj\<hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j =j4j =j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj3=h]h atomic_t *v}(hj5=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-=ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjL=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjH=hMhjI=ubah}(h]h ]h"]h$]h&]uh1jhj-=ubeh}(h]h ]h"]h$]h&]uh1jhjH=hMhj*=ubah}(h]h ]h"]h$]h&]uh1jhj=ubj9)}(h**Description**h]jz)}(hjn=h]h Description}(hjp=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl=ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj=hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh to (}(hj=hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh + 1) with release ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_release() there.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj9)}(h **Return**h]jz)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj=hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_inc_return_relaxed (C function)c.atomic_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_relaxed (atomic_t *v)h]h)}(h*int atomic_inc_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj.>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhj->hMubh)}(hatomic_inc_return_relaxedh]h)}(hatomic_inc_return_relaxedh]hatomic_inc_return_relaxed}(hj@>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj->hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj_>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetja>modnameN classnameNjcjf)}ji]jl)}j_jB>sbc.atomic_inc_return_relaxedasbuh1hhjX>ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjX>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX>ubh)}(hjh]hv}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjX>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjT>ubah}(h]h ]h"]h$]h&]jj uh1jhj>hhhj->hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj->hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj->hMhj>hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj->hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj?h]h atomic_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hj??h]h Description}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=?ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjU?hhhNhNubjz)}(h**v**h]hv}(hj]?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU?ubh to (}(hjU?hhhNhNubjz)}(h**v**h]hv}(hjo?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU?ubh + 1) with relaxed ordering.}(hjU?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj9)}(h **Return**h]jz)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj?hhhNhNubjz)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_inc (C function)c.atomic_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h"int atomic_fetch_inc (atomic_t *v)h]h)}(h!int atomic_fetch_inc(atomic_t *v)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?hhhj?hMubh)}(hatomic_fetch_inch]h)}(hatomic_fetch_inch]hatomic_fetch_inc}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj @ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?hhhj?hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj0@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2@modnameN classnameNjcjf)}ji]jl)}j_j@sbc.atomic_fetch_incasbuh1hhj)@ubj=)}(h h]h }(hjP@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)@ubj)}(hjh]h*}(hj^@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)@ubh)}(hjh]hv}(hjk@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%@ubah}(h]h ]h"]h$]h&]jj uh1jhj?hhhj?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhj?hMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1hhj?hMhj?hhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@j4j@j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj@h]h atomic_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj&AhhhNhNubjz)}(h**v**h]hv}(hj.AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Aubh to (}(hj&AhhhNhNubjz)}(h**v**h]hv}(hj@AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Aubh + 1) with full ordering.}(hj&AhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there.}(hjYAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj9)}(h **Return**h]jz)}(hjjAh]hReturn}(hjlAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhAubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj9)}(hThe original value of **v**.h](hThe original value of }(hjAhhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_acquire (C function)c.atomic_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_inc_acquire (atomic_t *v)h]h)}(h)int atomic_fetch_inc_acquire(atomic_t *v)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjAhMubh)}(hatomic_fetch_inc_acquireh]h)}(hatomic_fetch_inc_acquireh]hatomic_fetch_inc_acquire}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjAhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjBmodnameN classnameNjcjf)}ji]jl)}j_jAsbc.atomic_fetch_inc_acquireasbuh1hhjAubj=)}(h h]h }(hj!BhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hjh]h*}(hj/BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hjh]hv}(hjhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjBhhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh to (}(hjBhhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh + 1) with acquire ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_acquire() there.}(hj*ChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(h **Return**h]jz)}(hj;Ch]hReturn}(hj=ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9Cubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(hThe original value of **v**.h](hThe original value of }(hjQChhhNhNubjz)}(h**v**h]hv}(hjYChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQCubh.}(hjQChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_release (C function)c.atomic_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_inc_release (atomic_t *v)h]h)}(h)int atomic_fetch_inc_release(atomic_t *v)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!ubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjChM!ubh)}(hatomic_fetch_inc_releaseh]h)}(hatomic_fetch_inc_releaseh]hatomic_fetch_inc_release}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjChM!ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_jCsbc.atomic_fetch_inc_releaseasbuh1hhjCubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hjh]hv}(hj DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubah}(h]h ]h"]h$]h&]jj uh1jhjChhhjChM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjChM!ubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhjChM!hjChhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj6DhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj3Dhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChM!ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNDj4jNDj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjXDh]h Parameters}(hjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVDubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjRDubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjwDh]h atomic_t *v}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjqDubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhM"hjDubah}(h]h ]h"]h$]h&]uh1jhjqDubeh}(h]h ]h"]h$]h&]uh1jhjDhM"hjnDubah}(h]h ]h"]h$]h&]uh1jhjRDubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjRDubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjDhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh to (}(hjDhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh + 1) with release ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hjRDubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_release() there.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjRDubj9)}(h **Return**h]jz)}(hj Eh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Eubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjRDubj9)}(hThe original value of **v**.h](hThe original value of }(hj"EhhhNhNubjz)}(h**v**h]hv}(hj*EhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"Eubh.}(hj"EhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjRDubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_inc_relaxed (C function)c.atomic_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_inc_relaxed (atomic_t *v)h]h)}(h)int atomic_fetch_inc_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjcEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Ehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3ubj=)}(h h]h }(hjrEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_EhhhjqEhM3ubh)}(hatomic_fetch_inc_relaxedh]h)}(hatomic_fetch_inc_relaxedh]hatomic_fetch_inc_relaxed}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_EhhhjqEhM3ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jl)}j_jEsbc.atomic_fetch_inc_relaxedasbuh1hhjEubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hjh]hv}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubah}(h]h ]h"]h$]h&]jj uh1jhj_EhhhjqEhM3ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[EhhhjqEhM3ubah}(h]jVEah ](jjeh"]h$]h&]jj)jhuh1hhjqEhM3hjXEhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjFhhubah}(h]h ]h"]h$]h&]uh1jhjXEhhhjqEhM3ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj)Fh]h Parameters}(hj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'Fubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj#Fubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjHFh]h atomic_t *v}(hjJFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjBFubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjaFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]FhM4hj^Fubah}(h]h ]h"]h$]h&]uh1jhjBFubeh}(h]h ]h"]h$]h&]uh1jhj]FhM4hj?Fubah}(h]h ]h"]h$]h&]uh1jhj#Fubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj#Fubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjFhhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh to (}(hjFhhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh + 1) with relaxed ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj#Fubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_relaxed() there.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj#Fubj9)}(h **Return**h]jz)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj#Fubj9)}(hThe original value of **v**.h](hThe original value of }(hjFhhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hj#Fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_dec (C function) c.atomic_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(hvoid atomic_dec (atomic_t *v)h]h)}(hvoid atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hj4GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Ghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDubj=)}(h h]h }(hjCGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0GhhhjBGhMDubh)}(h atomic_dech]h)}(h atomic_dech]h atomic_dec}(hjUGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQGubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0GhhhjBGhMDubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjtGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqGubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjvGmodnameN classnameNjcjf)}ji]jl)}j_jWGsb c.atomic_decasbuh1hhjmGubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmGubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmGubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiGubah}(h]h ]h"]h$]h&]jj uh1jhj0GhhhjBGhMDubeh}(h]h ]h"]h$]h&]jj juh1hjjhj,GhhhjBGhMDubah}(h]j'Gah ](jjeh"]h$]h&]jj)jhuh1hhjBGhMDhj)Ghhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjGhhubah}(h]h ]h"]h$]h&]uh1jhj)GhhhjBGhMDubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jGj4jGj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_dec() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjGubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjHh]h atomic_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjHubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj2HhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.HhMEhj/Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj.HhMEhjHubah}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjTHh]h Description}(hjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjGubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjjHhhhNhNubjz)}(h**v**h]hv}(hjrHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjHubh to (}(hjjHhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjHubh - 1) with relaxed ordering.}(hjjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjGubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_dec() there.h]h:Unsafe to use in noinstr code; use raw_atomic_dec() there.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjGubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjGubj9)}(hNothing.h]hNothing.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_dec_return (C function)c.atomic_dec_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h#int atomic_dec_return (atomic_t *v)h]h)}(h"int atomic_dec_return(atomic_t *v)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHhhhjIhMUubh)}(hatomic_dec_returnh]h)}(hatomic_dec_returnh]hatomic_dec_return}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHhhhjIhMUubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj3IhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0Iubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5ImodnameN classnameNjcjf)}ji]jl)}j_jIsbc.atomic_dec_returnasbuh1hhj,Iubj=)}(h h]h }(hjSIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,Iubj)}(hjh]h*}(hjaIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Iubh)}(hjh]hv}(hjnIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,Iubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(Iubah}(h]h ]h"]h$]h&]jj uh1jhjHhhhjIhMUubeh}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjIhMUubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjIhMUhjHhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjIhMUubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjIubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjIh]h atomic_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjIubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMVhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMVhjIubah}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjIubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj)JhhhNhNubjz)}(h**v**h]hv}(hj1JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)Jubh to (}(hj)JhhhNhNubjz)}(h**v**h]hv}(hjCJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)Jubh - 1) with full ordering.}(hj)JhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjIubj9)}(hAUnsafe to use in noinstr code; use raw_atomic_dec_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_dec_return() there.}(hj\JhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjIubj9)}(h **Return**h]jz)}(hjmJh]hReturn}(hjoJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjIubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_dec_return_acquire (C function)c.atomic_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_dec_return_acquire (atomic_t *v)h]h)}(h*int atomic_dec_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMgubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJhhhjJhMgubh)}(hatomic_dec_return_acquireh]h)}(hatomic_dec_return_acquireh]hatomic_dec_return_acquire}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhjJhMgubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jl)}j_jJsbc.atomic_dec_return_acquireasbuh1hhjJubj=)}(h h]h }(hj$KhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJubj)}(hjh]h*}(hj2KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hjh]hv}(hj?KhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJubah}(h]h ]h"]h$]h&]jj uh1jhjJhhhjJhMgubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhjJhMgubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjJhMghjJhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjeKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMgubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjKubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjKh]h atomic_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjKubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMhhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhhjKubah}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjKubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjKhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh to (}(hjKhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh - 1) with acquire ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjKubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_dec_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_dec_return_acquire() there.}(hj-LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjKubj9)}(h **Return**h]jz)}(hj>Lh]hReturn}(hj@LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhjxMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjtMubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhMyhjMubah}(h]h ]h"]h$]h&]uh1jhjtMubeh}(h]h ]h"]h$]h&]uh1jhjMhMyhjqMubah}(h]h ]h"]h$]h&]uh1jhjUMubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjUMubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh to (}(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh - 1) with release ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjUMubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_dec_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_dec_return_release() there.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjUMubj9)}(h **Return**h]jz)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Nubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjUMubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj%NhhhNhNubjz)}(h**v**h]hv}(hj-NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%Nubh.}(hj%NhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic_dec_return_relaxed (C function)c.atomic_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+int atomic_dec_return_relaxed (atomic_t *v)h]h)}(h*int atomic_dec_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjfNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjuNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbNhhhjtNhMubh)}(hatomic_dec_return_relaxedh]h)}(hatomic_dec_return_relaxedh]hatomic_dec_return_relaxed}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbNhhhjtNhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNmodnameN classnameNjcjf)}ji]jl)}j_jNsbc.atomic_dec_return_relaxedasbuh1hhjNubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hjh]hv}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjNubah}(h]h ]h"]h$]h&]jj uh1jhjbNhhhjtNhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^NhhhjtNhMubah}(h]jYNah ](jjeh"]h$]h&]jj)jhuh1hhjtNhMhj[Nhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhj[NhhhjtNhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j"Oj4j"Oj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj,Oh]h Parameters}(hj.OhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*Oubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjKOh]h atomic_t *v}(hjMOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjEOubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjdOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`OhMhjaOubah}(h]h ]h"]h$]h&]uh1jhjEOubeh}(h]h ]h"]h$]h&]uh1jhj`OhMhjBOubah}(h]h ]h"]h$]h&]uh1jhj&Oubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh to (}(hjOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh - 1) with relaxed ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubj9)}(hIUnsafe to use in noinstr code; use raw_atomic_dec_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_dec_return_relaxed() there.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubj9)}(h **Return**h]jz)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&Oubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_dec (C function)c.atomic_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h"int atomic_fetch_dec (atomic_t *v)h]h)}(h!int atomic_fetch_dec(atomic_t *v)h](j)}(hinth]hint}(hj7PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Phhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjFPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3PhhhjEPhMubh)}(hatomic_fetch_dech]h)}(hatomic_fetch_dech]hatomic_fetch_dec}(hjXPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTPubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3PhhhjEPhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjwPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjyPmodnameN classnameNjcjf)}ji]jl)}j_jZPsbc.atomic_fetch_decasbuh1hhjpPubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpPubh)}(hjh]hv}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlPubah}(h]h ]h"]h$]h&]jj uh1jhj3PhhhjEPhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/PhhhjEPhMubah}(h]j*Pah ](jjeh"]h$]h&]jj)jhuh1hhjEPhMhj,Phhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhj,PhhhjEPhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_dec() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjQh]h atomic_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj5QhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1QhMhj2Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhj1QhMhjQubah}(h]h ]h"]h$]h&]uh1jhjPubj9)}(h**Description**h]jz)}(hjWQh]h Description}(hjYQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUQubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjmQhhhNhNubjz)}(h**v**h]hv}(hjuQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmQubh to (}(hjmQhhhNhNubjz)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmQubh - 1) with full ordering.}(hjmQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_dec() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_dec() there.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj9)}(h **Return**h]jz)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj9)}(hThe original value of **v**.h](hThe original value of }(hjQhhhNhNubjz)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_acquire (C function)c.atomic_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_dec_acquire (atomic_t *v)h]h)}(h)int atomic_fetch_dec_acquire(atomic_t *v)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjRhMubh)}(hatomic_fetch_dec_acquireh]h)}(hatomic_fetch_dec_acquireh]hatomic_fetch_dec_acquire}(hj)RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%Rubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjRhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjHRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjERubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJRmodnameN classnameNjcjf)}ji]jl)}j_j+Rsbc.atomic_fetch_dec_acquireasbuh1hhjARubj=)}(h h]h }(hjhRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjARubj)}(hjh]h*}(hjvRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjARubh)}(hjh]hv}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjARubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=Rubah}(h]h ]h"]h$]h&]jj uh1jhjRhhhjRhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjRhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjRhMhjQhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjRhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_dec_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjRh]h atomic_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjShMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hj(Sh]h Description}(hj*ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Subah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj>ShhhNhNubjz)}(h**v**h]hv}(hjFShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>Subh to (}(hj>ShhhNhNubjz)}(h**v**h]hv}(hjXShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>Subh - 1) with acquire ordering.}(hj>ShhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_acquire() there.}(hjqShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(h **Return**h]jz)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(hThe original value of **v**.h](hThe original value of }(hjShhhNhNubjz)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_release (C function)c.atomic_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_dec_release (atomic_t *v)h]h)}(h)int atomic_fetch_dec_release(atomic_t *v)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhjShMubh)}(hatomic_fetch_dec_releaseh]h)}(hatomic_fetch_dec_releaseh]hatomic_fetch_dec_release}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.atomic_fetch_dec_releaseasbuh1hhjTubj=)}(h h]h }(hj9ThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubj)}(hjh]h*}(hjGThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hjh]hv}(hjTThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjTubah}(h]h ]h"]h$]h&]jj uh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjShMhjShhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj}ThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jTj4jTj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_dec_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjTh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjUhhhNhNubjz)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh to (}(hjUhhhNhNubjz)}(h**v**h]hv}(hj)UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh - 1) with release ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_release() there.}(hjBUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(h **Return**h]jz)}(hjSUh]hReturn}(hjUUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQUubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(hThe original value of **v**.h](hThe original value of }(hjiUhhhNhNubjz)}(h**v**h]hv}(hjqUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiUubh.}(hjiUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_dec_relaxed (C function)c.atomic_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int atomic_fetch_dec_relaxed (atomic_t *v)h]h)}(h)int atomic_fetch_dec_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUhhhjUhMubh)}(hatomic_fetch_dec_relaxedh]h)}(hatomic_fetch_dec_relaxedh]hatomic_fetch_dec_relaxed}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjUhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_jUsbc.atomic_fetch_dec_relaxedasbuh1hhjUubj=)}(h h]h }(hj VhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hjh]hv}(hj%VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubah}(h]h ]h"]h$]h&]jj uh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1hhjUhMhjUhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjNVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jfVj4jfVj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_dec_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjpVh]h Parameters}(hjrVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnVubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjVh]h atomic_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjjVubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh to (}(hjVhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh - 1) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_dec_relaxed() there.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubj9)}(h **Return**h]jz)}(hj$Wh]hReturn}(hj&WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"Wubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubj9)}(hThe original value of **v**.h](hThe original value of }(hj:WhhhNhNubjz)}(h**v**h]hv}(hjBWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Wubh.}(hj:WhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_and (C function) c.atomic_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h$void atomic_and (int i, atomic_t *v)h]h)}(h#void atomic_and(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj{WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwWhhhjWhMubh)}(h7 atomic_andh]h)}(h atomic_andh]h atomic_and}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwWhhhjWhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubh)}(hjh]hi}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjWmodnameN classnameNjcjf)}ji]jl)}j_jWsb c.atomic_andasbuh1hhjWubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hjh]hv}(hj*XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWubeh}(h]h ]h"]h$]h&]jj uh1jhjwWhhhjWhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjsWhhhjWhMubah}(h]jnWah ](jjeh"]h$]h&]jj)jhuh1hhjWhMhjpWhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjSXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPXhhubah}(h]h ]h"]h$]h&]uh1jhjpWhhhjWhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkXj4jkXj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_and() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjuXh]h Parameters}(hjwXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsXubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjXh]hint i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]j9)}(h int valueh]h int value}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjXh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubeh}(h]h ]h"]h$]h&]uh1jhjoXubj9)}(h**Description**h]jz)}(hjYh]h Description}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjYhhhNhNubjz)}(h**v**h]hv}(hj&YhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh to (}(hjYhhhNhNubjz)}(h**v**h]hv}(hj8YhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh & }(hjYhhhNhNubjz)}(h**i**h]hi}(hjJYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh) with relaxed ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_and() there.h]h:Unsafe to use in noinstr code; use raw_atomic_and() there.}(hjcYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubj9)}(h **Return**h]jz)}(hjtYh]hReturn}(hjvYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrYubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubj9)}(hNothing.h]hNothing.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoXubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_and (C function)c.atomic_fetch_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h)int atomic_fetch_and (int i, atomic_t *v)h]h)}(h(int atomic_fetch_and(int i, atomic_t *v)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYhhhjYhMubh)}(hatomic_fetch_andh]h)}(hatomic_fetch_andh]hatomic_fetch_and}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjYhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYubh)}(hjh]hi}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj-ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*Zubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/ZmodnameN classnameNjcjf)}ji]jl)}j_jYsbc.atomic_fetch_andasbuh1hhj&Zubj=)}(h h]h }(hjMZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&Zubj)}(hjh]h*}(hj[ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Zubh)}(hjh]hv}(hjhZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&Zubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubeh}(h]h ]h"]h$]h&]jj uh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjYhMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1hhjYhMhjYhhubj )}(hhh]j9)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_and() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjZh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh]j9)}(h int valueh]h int value}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjZubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj [h]h atomic_t *v}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj [ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj$[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj [hMhj![ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj [hMhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hjF[h]h Description}(hjH[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD[ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj\[hhhNhNubjz)}(h**v**h]hv}(hjd[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\[ubh to (}(hj\[hhhNhNubjz)}(h**v**h]hv}(hjv[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\[ubh & }(hj\[hhhNhNubjz)}(h**i**h]hi}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\[ubh) with full ordering.}(hj\[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_and() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_and() there.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj9)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubjz)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_acquire (C function)c.atomic_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_and_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_and_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj \hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\hhhj\hMubh)}(hatomic_fetch_and_acquireh]h)}(hatomic_fetch_and_acquireh]hatomic_fetch_and_acquire}(hj*\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhj\hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjF\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB\ubj=)}(h h]h }(hjT\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjB\ubh)}(hjh]hi}(hjb\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>\ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj}\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jl)}j_j,\sbc.atomic_fetch_and_acquireasbuh1hhjv\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjv\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv\ubh)}(hjh]hv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>\ubeh}(h]h ]h"]h$]h&]jj uh1jhj\hhhj\hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\hhhj\hMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1hhj\hMhj[hhubj )}(hhh]j9)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj\hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j\j4j\j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_and_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj"]h]hint i}(hj$]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubj)}(hhh]j9)}(h int valueh]h int value}(hj;]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7]hMhj8]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj7]hMhj]ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj[]h]h atomic_t *v}(hj]]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjU]ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjt]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjp]hMhjq]ubah}(h]h ]h"]h$]h&]uh1jhjU]ubeh}(h]h ]h"]h$]h&]uh1jhjp]hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh to (}(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh & }(hj]hhhNhNubjz)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh) with acquire ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_acquire() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(h **Return**h]jz)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hThe original value of **v**.h](hThe original value of }(hj^hhhNhNubjz)}(h**v**h]hv}(hj ^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_release (C function)c.atomic_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_and_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_and_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjY^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjh^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjU^hhhjg^hMubh)}(hatomic_fetch_and_releaseh]h)}(hatomic_fetch_and_releaseh]hatomic_fetch_and_release}(hjz^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjU^hhhjg^hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hjh]hi}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]jl)}j_j|^sbc.atomic_fetch_and_releaseasbuh1hhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hjh]hv}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhjU^hhhjg^hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQ^hhhjg^hMubah}(h]jL^ah ](jjeh"]h$]h&]jj)jhuh1hhjg^hMhjN^hhubj )}(hhh]j9)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj1_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj._hhubah}(h]h ]h"]h$]h&]uh1jhjN^hhhjg^hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jI_j4jI_j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_and_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjS_h]h Parameters}(hjU_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ_ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM_ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjr_h]hint i}(hjt_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjp_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjl_ubj)}(hhh]j9)}(h int valueh]h int value}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjl_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhji_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj_h]h atomic_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhji_ubeh}(h]h ]h"]h$]h&]uh1jhjM_ubj9)}(h**Description**h]jz)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM_ubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hj_hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh to (}(hj_hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh & }(hj_hhhNhNubjz)}(h**i**h]hi}(hj(`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh) with release ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM_ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_release() there.}(hjA`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM_ubj9)}(h **Return**h]jz)}(hjR`h]hReturn}(hjT`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP`ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjM_ubj9)}(hThe original value of **v**.h](hThe original value of }(hjh`hhhNhNubjz)}(h**v**h]hv}(hjp`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjh`ubh.}(hjh`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjM_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_and_relaxed (C function)c.atomic_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_and_relaxed (int i, atomic_t *v)h]h)}(h0int atomic_fetch_and_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhj`hM+ubh)}(hatomic_fetch_and_relaxedh]h)}(hatomic_fetch_and_relaxedh]hatomic_fetch_and_relaxed}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhj`hM+ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`ubh)}(hjh]hi}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjamodnameN classnameNjcjf)}ji]jl)}j_j`sbc.atomic_fetch_and_relaxedasbuh1hhjaubj=)}(h h]h }(hj=ahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hjKahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hjh]hv}(hjXahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj`hhhj`hM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj`hM+ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj`hM+hj`hhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hj~ahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hM+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_and_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjaubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjah]hint i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjaubj)}(hhh]j9)}(h int valueh]h int value}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahM,hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM,hjaubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjah]h atomic_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjaubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhM-hjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhM-hjaubeh}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hj6bh]h Description}(hj8bhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4bubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjaubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjLbhhhNhNubjz)}(h**v**h]hv}(hjTbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLbubh to (}(hjLbhhhNhNubjz)}(h**v**h]hv}(hjfbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLbubh & }(hjLbhhhNhNubjz)}(h**i**h]hi}(hjxbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLbubh) with relaxed ordering.}(hjLbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjaubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_relaxed() there.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjaubj9)}(h **Return**h]jz)}(hjbh]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjaubj9)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_andnot (C function)c.atomic_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'void atomic_andnot (int i, atomic_t *v)h]h)}(h&void atomic_andnot(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=ubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbhhhjchM=ubh)}(h atomic_andnoth]h)}(h atomic_andnoth]h atomic_andnot}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjchM=ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj6chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2cubj=)}(h h]h }(hjDchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2cubh)}(hjh]hi}(hjRchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2cubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.cubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjmchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjocmodnameN classnameNjcjf)}ji]jl)}j_jcsbc.atomic_andnotasbuh1hhjfcubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfcubh)}(hjh]hv}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfcubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.cubeh}(h]h ]h"]h$]h&]jj uh1jhjbhhhjchM=ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjchM=ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhjchM=hjbhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjchM=ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jcj4jcj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_andnot() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjdh]hint i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hj dubj)}(hhh]j9)}(h int valueh]h int value}(hj+dhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'dhM>hj(dubah}(h]h ]h"]h$]h&]uh1jhj dubeh}(h]h ]h"]h$]h&]uh1jhj'dhM>hj dubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjKdh]h atomic_t *v}(hjMdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjEdubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjddhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`dhM?hjadubah}(h]h ]h"]h$]h&]uh1jhjEdubeh}(h]h ]h"]h$]h&]uh1jhj`dhM?hj dubeh}(h]h ]h"]h$]h&]uh1jhjcubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjdhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh to (}(hjdhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh & }(hjdhhhNhNubjz)}(h**~i**h]h~i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh) with relaxed ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjcubj9)}(h=Unsafe to use in noinstr code; use raw_atomic_andnot() there.h]h=Unsafe to use in noinstr code; use raw_atomic_andnot() there.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjcubj9)}(h **Return**h]jz)}(hjdh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjcubj9)}(hNothing.h]hNothing.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_fetch_andnot (C function)c.atomic_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,int atomic_fetch_andnot (int i, atomic_t *v)h]h)}(h+int atomic_fetch_andnot(int i, atomic_t *v)h](j)}(hinth]hint}(hj7ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubj=)}(h h]h }(hjFehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ehhhjEehMOubh)}(hatomic_fetch_andnoth]h)}(hatomic_fetch_andnoth]hatomic_fetch_andnot}(hjXehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTeubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3ehhhjEehMOubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjtehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpeubh)}(hjh]hi}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjleubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jZesbc.atomic_fetch_andnotasbuh1hhjeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hjh]hv}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjleubeh}(h]h ]h"]h$]h&]jj uh1jhj3ehhhjEehMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/ehhhjEehMOubah}(h]j*eah ](jjeh"]h$]h&]jj)jhuh1hhjEehMOhj,ehhubj )}(hhh]j9)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj fhhubah}(h]h ]h"]h$]h&]uh1jhj,ehhhjEehMOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'fj4j'fj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj1fh]h Parameters}(hj3fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/fubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj+fubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjPfh]hint i}(hjRfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjJfubj)}(hhh]j9)}(h int valueh]h int value}(hjifhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjefhMPhjffubah}(h]h ]h"]h$]h&]uh1jhjJfubeh}(h]h ]h"]h$]h&]uh1jhjefhMPhjGfubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjfh]h atomic_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjfubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMQhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMQhjGfubeh}(h]h ]h"]h$]h&]uh1jhj+fubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj+fubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjfhhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh to (}(hjfhhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh & }(hjfhhhNhNubjz)}(h**~i**h]h~i}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh) with full ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhj+fubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_fetch_andnot() there.h]hCUnsafe to use in noinstr code; use raw_atomic_fetch_andnot() there.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThj+fubj9)}(h **Return**h]jz)}(hj0gh]hReturn}(hj2ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.gubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhj+fubj9)}(hThe original value of **v**.h](hThe original value of }(hjFghhhNhNubjz)}(h**v**h]hv}(hjNghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFgubh.}(hjFghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhj+fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_acquire (C function)c.atomic_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int atomic_fetch_andnot_acquire (int i, atomic_t *v)h]h)}(h3int atomic_fetch_andnot_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjghhhjghMbubh)}(hatomic_fetch_andnot_acquireh]h)}(hatomic_fetch_andnot_acquireh]hatomic_fetch_andnot_acquire}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMbubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubh)}(hjh]hi}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjgmodnameN classnameNjcjf)}ji]jl)}j_jgsbc.atomic_fetch_andnot_acquireasbuh1hhjgubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hjh]h*}(hj)hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hjh]hv}(hj6hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjghMbubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghMbubah}(h]jzgah ](jjeh"]h$]h&]jj)jhuh1hhjghMbhj|ghhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj_hhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj\hhhubah}(h]h ]h"]h$]h&]uh1jhj|ghhhjghMbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwhj4jwhj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhj{hubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjhh]hint i}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjhubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMchjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMchjhubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjhh]h atomic_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjhubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMdhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMdhjhubeh}(h]h ]h"]h$]h&]uh1jhj{hubj9)}(h**Description**h]jz)}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhj{hubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj*ihhhNhNubjz)}(h**v**h]hv}(hj2ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*iubh to (}(hj*ihhhNhNubjz)}(h**v**h]hv}(hjDihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*iubh & }(hj*ihhhNhNubjz)}(h**~i**h]h~i}(hjVihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*iubh) with acquire ordering.}(hj*ihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj{hubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_acquire() there.}(hjoihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghj{hubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~iubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihj{hubj9)}(hThe original value of **v**.h](hThe original value of }(hjihhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhj{hubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_release (C function)c.atomic_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int atomic_fetch_andnot_release (int i, atomic_t *v)h]h)}(h3int atomic_fetch_andnot_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMtubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhjihMtubh)}(hatomic_fetch_andnot_releaseh]h)}(hatomic_fetch_andnot_releaseh]hatomic_fetch_andnot_release}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjihMtubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj=)}(h h]h }(hj"jhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjubh)}(hjh]hi}(hj0jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj jubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjKjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMjmodnameN classnameNjcjf)}ji]jl)}j_jisbc.atomic_fetch_andnot_releaseasbuh1hhjDjubj=)}(h h]h }(hjkjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDjubj)}(hjh]h*}(hjyjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDjubh)}(hjh]hv}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj jubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhjihMtubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhjihMtubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhjihMthjihhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMtubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjjh]hint i}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjjubj)}(hhh]j9)}(h int valueh]h int value}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMuhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjkhMuhjjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj)kh]h atomic_t *v}(hj+khhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'kubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj#kubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjBkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>khMvhj?kubah}(h]h ]h"]h$]h&]uh1jhj#kubeh}(h]h ]h"]h$]h&]uh1jhj>khMvhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubj9)}(h**Description**h]jz)}(hjdkh]h Description}(hjfkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbkubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjjubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjzkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzkubh to (}(hjzkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzkubh & }(hjzkhhhNhNubjz)}(h**~i**h]h~i}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzkubh) with release ordering.}(hjzkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_release() there.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjjubj9)}(h **Return**h]jz)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjjubj9)}(hThe original value of **v**.h](hThe original value of }(hjkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_fetch_andnot_relaxed (C function)c.atomic_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int atomic_fetch_andnot_relaxed (int i, atomic_t *v)h]h)}(h3int atomic_fetch_andnot_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj'lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#lhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj6lhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#lhhhj5lhMubh)}(hatomic_fetch_andnot_relaxedh]h)}(hatomic_fetch_andnot_relaxedh]hatomic_fetch_andnot_relaxed}(hjHlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDlubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#lhhhj5lhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjdlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`lubj=)}(h h]h }(hjrlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`lubh)}(hjh]hi}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`lubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\lubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjlmodnameN classnameNjcjf)}ji]jl)}j_jJlsbc.atomic_fetch_andnot_relaxedasbuh1hhjlubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hjh]hv}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\lubeh}(h]h ]h"]h$]h&]jj uh1jhj#lhhhj5lhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjlhhhj5lhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1hhj5lhMhjlhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhj5lhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj!mh]h Parameters}(hj#mhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj@mh]hint i}(hjBmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>mubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:mubj)}(hhh]j9)}(h int valueh]h int value}(hjYmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUmhMhjVmubah}(h]h ]h"]h$]h&]uh1jhj:mubeh}(h]h ]h"]h$]h&]uh1jhjUmhMhj7mubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjymh]h atomic_t *v}(hj{mhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsmubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjsmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj7mubeh}(h]h ]h"]h$]h&]uh1jhjmubj9)}(h**Description**h]jz)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjmhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh to (}(hjmhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh & }(hjmhhhNhNubjz)}(h**~i**h]h~i}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh) with relaxed ordering.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_fetch_andnot_relaxed() there.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj9)}(h **Return**h]jz)}(hj nh]hReturn}(hj"nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj9)}(hThe original value of **v**.h](hThe original value of }(hj6nhhhNhNubjz)}(h**v**h]hv}(hj>nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6nubh.}(hj6nhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_or (C function) c.atomic_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h#void atomic_or (int i, atomic_t *v)h]h)}(h"void atomic_or(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjwnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsnhhhjnhMubh)}(h atomic_orh]h)}(h atomic_orh]h atomic_or}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ](jjeh"]h$]h&]jj uh1hhjsnhhhjnhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubh)}(hjh]hi}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_jnsb c.atomic_orasbuh1hhjnubj=)}(h h]h }(hj ohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hjh]hv}(hj&ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnubeh}(h]h ]h"]h$]h&]jj uh1jhjsnhhhjnhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjonhhhjnhMubah}(h]jjnah ](jjeh"]h$]h&]jj)jhuh1hhjnhMhjlnhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjOohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLohhubah}(h]h ]h"]h$]h&]uh1jhjlnhhhjnhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgoj4jgoj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_or() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjqoh]h Parameters}(hjsohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjooubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjoh]hint i}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj)}(hhh]j9)}(h int valueh]h int value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjoubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjoh]h atomic_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjoubeh}(h]h ]h"]h$]h&]uh1jhjkoubj9)}(h**Description**h]jz)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjphhhNhNubjz)}(h**v**h]hv}(hj"phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh to (}(hjphhhNhNubjz)}(h**v**h]hv}(hj4phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh | }(hjphhhNhNubjz)}(h**i**h]hi}(hjFphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh) with relaxed ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubj9)}(h9Unsafe to use in noinstr code; use raw_atomic_or() there.h]h9Unsafe to use in noinstr code; use raw_atomic_or() there.}(hj_phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubj9)}(h **Return**h]jz)}(hjpph]hReturn}(hjrphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubj9)}(hNothing.h]hNothing.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_or (C function)c.atomic_fetch_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(int atomic_fetch_or (int i, atomic_t *v)h]h)}(h'int atomic_fetch_or(int i, atomic_t *v)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjphhhjphMubh)}(hatomic_fetch_orh]h)}(hatomic_fetch_orh]hatomic_fetch_or}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjphMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubh)}(hjh]hi}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj)qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&qubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+qmodnameN classnameNjcjf)}ji]jl)}j_jpsbc.atomic_fetch_orasbuh1hhj"qubj=)}(h h]h }(hjIqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"qubj)}(hjh]h*}(hjWqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"qubh)}(hjh]hv}(hjdqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"qubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjphMhjphhubj )}(hhh]j9)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjqh]hint i}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh]j9)}(h int valueh]h int value}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjrh]h atomic_t *v}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjrubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjBrh]h Description}(hjDrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@rubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjXrhhhNhNubjz)}(h**v**h]hv}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXrubh to (}(hjXrhhhNhNubjz)}(h**v**h]hv}(hjrrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXrubh | }(hjXrhhhNhNubjz)}(h**i**h]hi}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXrubh) with full ordering.}(hjXrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_fetch_or() there.h]h?Unsafe to use in noinstr code; use raw_atomic_fetch_or() there.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj9)}(h **Return**h]jz)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj9)}(hThe original value of **v**.h](hThe original value of }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_or_acquire (C function)c.atomic_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0int atomic_fetch_or_acquire (int i, atomic_t *v)h]h)}(h/int atomic_fetch_or_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjshhhjshMubh)}(hatomic_fetch_or_acquireh]h)}(hatomic_fetch_or_acquireh]hatomic_fetch_or_acquire}(hj&shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"subah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjshMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjBshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>subj=)}(h h]h }(hjPshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>subh)}(hjh]hi}(hj^shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>subeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:subj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjyshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvsubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj{smodnameN classnameNjcjf)}ji]jl)}j_j(ssbc.atomic_fetch_or_acquireasbuh1hhjrsubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrsubh)}(hjh]hv}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:subeh}(h]h ]h"]h$]h&]jj uh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjrhhhjshMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjshMhjrhhubj )}(hhh]j9)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjshMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjsh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjth]hint i}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubj)}(hhh]j9)}(h int valueh]h int value}(hj7thhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3thMhj4tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj3thMhjtubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjWth]h atomic_t *v}(hjYthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQtubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjpthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlthMhjmtubah}(h]h ]h"]h$]h&]uh1jhjQtubeh}(h]h ]h"]h$]h&]uh1jhjlthMhjtubeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjthhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh to (}(hjthhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh | }(hjthhhNhNubjz)}(h**i**h]hi}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh) with acquire ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_acquire() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_acquire() there.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(hThe original value of **v**.h](hThe original value of }(hjuhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_or_release (C function)c.atomic_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0int atomic_fetch_or_release (int i, atomic_t *v)h]h)}(h/int atomic_fetch_or_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjUuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjduhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQuhhhjcuhMubh)}(hatomic_fetch_or_releaseh]h)}(hatomic_fetch_or_releaseh]hatomic_fetch_or_release}(hjvuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjruubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQuhhhjcuhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubh)}(hjh]hi}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjumodnameN classnameNjcjf)}ji]jl)}j_jxusbc.atomic_fetch_or_releaseasbuh1hhjuubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hjh]hv}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubeh}(h]h ]h"]h$]h&]jj uh1jhjQuhhhjcuhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMuhhhjcuhMubah}(h]jHuah ](jjeh"]h$]h&]jj)jhuh1hhjcuhMhjJuhhubj )}(hhh]j9)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj-vhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*vhhubah}(h]h ]h"]h$]h&]uh1jhjJuhhhjcuhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEvj4jEvj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjOvh]h Parameters}(hjQvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMvubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjnvh]hint i}(hjpvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhvubj)}(hhh]j9)}(h int valueh]h int value}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjhvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjevubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjvh]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjvubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjevubeh}(h]h ]h"]h$]h&]uh1jhjIvubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjvhhhNhNubjz)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh to (}(hjvhhhNhNubjz)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh | }(hjvhhhNhNubjz)}(h**i**h]hi}(hj$whhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh) with release ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_release() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_release() there.}(hj=whhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubj9)}(h **Return**h]jz)}(hjNwh]hReturn}(hjPwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLwubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubj9)}(hThe original value of **v**.h](hThe original value of }(hjdwhhhNhNubjz)}(h**v**h]hv}(hjlwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdwubh.}(hjdwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjIvubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_or_relaxed (C function)c.atomic_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0int atomic_fetch_or_relaxed (int i, atomic_t *v)h]h)}(h/int atomic_fetch_or_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjwhMubh)}(hatomic_fetch_or_relaxedh]h)}(hatomic_fetch_or_relaxedh]hatomic_fetch_or_relaxed}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjwhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwubh)}(hjh]hi}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjxmodnameN classnameNjcjf)}ji]jl)}j_jwsbc.atomic_fetch_or_relaxedasbuh1hhjxubj=)}(h h]h }(hj9xhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubj)}(hjh]h*}(hjGxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hjh]hv}(hjTxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjwhMubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjwhMhjwhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj}xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzxhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjxh]hint i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj)}(hhh]j9)}(h int valueh]h int value}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjxh]h atomic_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj yhMhj yubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj yhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hj2yh]h Description}(hj4yhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0yubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjHyhhhNhNubjz)}(h**v**h]hv}(hjPyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh to (}(hjHyhhhNhNubjz)}(h**v**h]hv}(hjbyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh | }(hjHyhhhNhNubjz)}(h**i**h]hi}(hjtyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh) with relaxed ordering.}(hjHyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_or_relaxed() there.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj9)}(h **Return**h]jz)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubj9)}(hThe original value of **v**.h](hThe original value of }(hjyhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_xor (C function) c.atomic_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h$void atomic_xor (int i, atomic_t *v)h]h)}(h#void atomic_xor(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyhhhjzhMubh)}(h atomic_xorh]h)}(h atomic_xorh]h atomic_xor}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhjzhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj2zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.zubj=)}(h h]h }(hj@zhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.zubh)}(hjh]hi}(hjNzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.zubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*zubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjizhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkzmodnameN classnameNjcjf)}ji]jl)}j_jzsb c.atomic_xorasbuh1hhjbzubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbzubh)}(hjh]hv}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*zubeh}(h]h ]h"]h$]h&]jj uh1jhjyhhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjyhhhjzhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjzhMhjyhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjzhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jzj4jzj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_xor() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj{h]hint i}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj {ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj)}(hhh]j9)}(h int valueh]h int value}(hj'{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#{hMhj${ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj#{hMhj{ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjG{h]h atomic_t *v}(hjI{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjA{ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj`{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\{hMhj]{ubah}(h]h ]h"]h$]h&]uh1jhjA{ubeh}(h]h ]h"]h$]h&]uh1jhj\{hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhjzubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh to (}(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh ^ }(hj{hhhNhNubjz)}(h**i**h]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh) with relaxed ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj9)}(h:Unsafe to use in noinstr code; use raw_atomic_xor() there.h]h:Unsafe to use in noinstr code; use raw_atomic_xor() there.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj9)}(h **Return**h]jz)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj9)}(hNothing.h]hNothing.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_fetch_xor (C function)c.atomic_fetch_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h)int atomic_fetch_xor (int i, atomic_t *v)h]h)}(h(int atomic_fetch_xor(int i, atomic_t *v)h](j)}(hinth]hint}(hj3|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjB|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/|hhhjA|hMubh)}(hatomic_fetch_xorh]h)}(hatomic_fetch_xorh]hatomic_fetch_xor}(hjT|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/|hhhjA|hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjp|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl|ubj=)}(h h]h }(hj~|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjl|ubh)}(hjh]hi}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjh|ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jl)}j_jV|sbc.atomic_fetch_xorasbuh1hhj|ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hjh]hv}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjh|ubeh}(h]h ]h"]h$]h&]jj uh1jhj/|hhhjA|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+|hhhjA|hMubah}(h]j&|ah ](jjeh"]h$]h&]jj)jhuh1hhjA|hMhj(|hhubj )}(hhh]j9)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj}hhubah}(h]h ]h"]h$]h&]uh1jhj(|hhhjA|hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j#}j4j#}j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj-}h]h Parameters}(hj/}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+}ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj'}ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjL}h]hint i}(hjN}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJ}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjF}ubj)}(hhh]j9)}(h int valueh]h int value}(hje}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hja}hMhjb}ubah}(h]h ]h"]h$]h&]uh1jhjF}ubeh}(h]h ]h"]h$]h&]uh1jhja}hMhjC}ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj}h]h atomic_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hjC}ubeh}(h]h ]h"]h$]h&]uh1jhj'}ubj9)}(h**Description**h]jz)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj'}ubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hj}hhhNhNubjz)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh to (}(hj}hhhNhNubjz)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh ^ }(hj}hhhNhNubjz)}(h**i**h]hi}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh) with full ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj'}ubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj'}ubj9)}(h **Return**h]jz)}(hj,~h]hReturn}(hj.~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*~ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'}ubj9)}(hThe original value of **v**.h](hThe original value of }(hjB~hhhNhNubjz)}(h**v**h]hv}(hjJ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB~ubh.}(hjB~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj'}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_acquire (C function)c.atomic_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_xor_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_xor_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~hhhj~hMubh)}(hatomic_fetch_xor_acquireh]h)}(hatomic_fetch_xor_acquireh]hatomic_fetch_xor_acquire}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhj~hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubh)}(hjh]hi}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj~modnameN classnameNjcjf)}ji]jl)}j_j~sbc.atomic_fetch_xor_acquireasbuh1hhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hjh]hv}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubeh}(h]h ]h"]h$]h&]jj uh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{~hhhj~hMubah}(h]jv~ah ](jjeh"]h$]h&]jj)jhuh1hhj~hMhjx~hhubj )}(hhh]j9)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXhhubah}(h]h ]h"]h$]h&]uh1jhjx~hhhj~hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_xor_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hj&hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh to (}(hj&hhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh ^ }(hj&hhhNhNubjz)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh) with acquire ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_acquire() there.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(h **Return**h]jz)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjwubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_release (C function)c.atomic_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_xor_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_xor_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjӀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjπhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjπhhhjhM,ubh)}(hatomic_fetch_xor_releaseh]h)}(hatomic_fetch_xor_releaseh]hatomic_fetch_xor_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjπhhhjhM,ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_fetch_xor_releaseasbuh1hhj@ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjπhhhjhM,ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjˀhhhjhM,ubah}(h]jƀah ](jjeh"]h$]h&]jj)jhuh1hhjhM,hjȀhhubj )}(hhh]j9)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjhhubah}(h]h ]h"]h$]h&]uh1jhjȀhhhjhM,ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jÁj4jÁj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj́h]h Parameters}(hjρhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjˁubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjǁubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj%h]h atomic_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hM.hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM.hjubeh}(h]h ]h"]h$]h&]uh1jhjǁubj9)}(h**Description**h]jz)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjǁubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjvhhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh to (}(hjvhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh ^ }(hjvhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh) with release ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjǁubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjǁubj9)}(h **Return**h]jz)}(hĵh]hReturn}(hj΂hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʂubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjǁubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjǁubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_fetch_xor_relaxed (C function)c.atomic_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1int atomic_fetch_xor_relaxed (int i, atomic_t *v)h]h)}(h0int atomic_fetch_xor_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj1hM?ubh)}(hatomic_fetch_xor_relaxedh]h)}(hatomic_fetch_xor_relaxedh]hatomic_fetch_xor_relaxed}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj1hM?ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubh)}(hjh]hi}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jFsbc.atomic_fetch_xor_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjŃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj҃hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj1hM?ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hM?ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj1hM?hjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hM?ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_xor_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj<h]hint i}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj6ubj)}(hhh]j9)}(h int valueh]h int value}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhM@hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM@hj3ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjuh]h atomic_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjoubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMAhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjƄhhhNhNubjz)}(h**v**h]hv}(hj΄hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƄubh to (}(hjƄhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƄubh ^ }(hjƄhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƄubh) with relaxed ordering.}(hjƄhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_xor_relaxed() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_xchg (C function) c.atomic_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&int atomic_xchg (atomic_t *v, int new)h]h)}(h%int atomic_xchg(atomic_t *v, int new)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjohhhjhMQubh)}(h atomic_xchgh]h)}(h atomic_xchgh]h atomic_xchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjohhhjhMQubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_xchgasbuh1hhjubj=)}(h h]h }(hjӅhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjohhhjhMQubeh}(h]h ]h"]h$]h&]jj juh1hjjhjkhhhjhMQubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1hhjhMQhjhhhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMQubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jdj4jdj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with full ordering. Unsafe to use in noinstr code; use raw_atomic_xchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjhubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjƆh]hint new}(hjȆhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjĆubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj߆hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjۆhMShj܆ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۆhMShjubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjhubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjhubj9)}(h;Unsafe to use in noinstr code; use raw_atomic_xchg() there.h]h;Unsafe to use in noinstr code; use raw_atomic_xchg() there.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjhubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjhubj9)}(hThe original value of **v**.h](hThe original value of }(hjqhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_acquire (C function)c.atomic_xchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int atomic_xchg_acquire (atomic_t *v, int new)h]h)}(h-int atomic_xchg_acquire(atomic_t *v, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMdubh)}(hatomic_xchg_acquireh]h)}(hatomic_xchg_acquireh]hatomic_xchg_acquire}(hjӇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjχubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMdubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jՇsbc.atomic_xchg_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(hnewh]hnew}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMdhjhhubj )}(hhh]j9)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_xchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj̈h]h atomic_t *v}(hjΈhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjʈubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjƈubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMehjubah}(h]h ]h"]h$]h&]uh1jhjƈubeh}(h]h ]h"]h$]h&]uh1jhjhMehjÈubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjÈubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjVhhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh to }(hjVhhhNhNubjz)}(h**new**h]hnew}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh with acquire ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_xchg_acquire() there.h]hCUnsafe to use in noinstr code; use raw_atomic_xchg_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_release (C function)c.atomic_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int atomic_xchg_release (atomic_t *v, int new)h]h)}(h-int atomic_xchg_release(atomic_t *v, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMvubh)}(hatomic_xchg_releaseh]h)}(hatomic_xchg_releaseh]hatomic_xchg_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMvubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_xchg_releaseasbuh1hhj*ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hjh]hv}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMvhjhhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjʊhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjNJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMvubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic_xchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMwhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMwhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjDh]hint new}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj>ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhMxhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMxhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_xchg_release() there.h]hCUnsafe to use in noinstr code; use raw_atomic_xchg_release() there.}(hjȋhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjubj9)}(h **Return**h]jz)}(hjًh]hReturn}(hjۋhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj׋ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_xchg_relaxed (C function)c.atomic_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int atomic_xchg_relaxed (atomic_t *v, int new)h]h)}(h-int atomic_xchg_relaxed(atomic_t *v, int new)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj>hMubh)}(hatomic_xchg_relaxedh]h)}(hatomic_xchg_relaxedh]hatomic_xchg_relaxed}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hMubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjrmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.atomic_xchg_relaxedasbuh1hhjiubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(hint newh](j)}(hinth]hint}(hjÌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjьhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjߌhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj%hhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j!j4j!j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_xchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjJh]h atomic_t *v}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjDubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj}ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjԍhhhNhNubjz)}(h**v**h]hv}(hj܍hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԍubh to }(hjԍhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԍubh with relaxed ordering.}(hjԍhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_xchg_relaxed() there.h]hCUnsafe to use in noinstr code; use raw_atomic_xchg_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj9)}(hThe original value of **v**.h](hThe original value of }(hj.hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_cmpxchg (C function)c.atomic_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int atomic_cmpxchg (atomic_t *v, int old, int new)h]h)}(h1int atomic_cmpxchg(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkhhhj}hMubh)}(hatomic_cmpxchgh]h)}(hatomic_cmpxchgh]hatomic_cmpxchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_cmpxchgasbuh1hhjubj=)}(h h]h }(hjώhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjݎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubh)}(hnewh]hnew}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjkhhhj}hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhj}hMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhj}hMhjdhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj׏hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjӏhMhjԏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjӏhMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj0h]hint new}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjѐhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.h]h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_acquire (C function)c.atomic_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:int atomic_cmpxchg_acquire (atomic_t *v, int old, int new)h]h)}(h9int atomic_cmpxchg_acquire(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNhhhj`hMubh)}(hatomic_cmpxchg_acquireh]h)}(hatomic_cmpxchg_acquireh]hatomic_cmpxchg_acquire}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jusbc.atomic_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj͑hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhj`hMhjGhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjڒh]hint old}(hjܒhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjؒubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjԒubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԒubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubj9)}(h**Description**h]jz)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjdhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh == }(hjdhhhNhNubjz)}(h**old**h]hold}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh), atomically updates }(hjdhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh to }(hjdhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh# with acquire ordering. Otherwise, }(hjdhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh2 is not modified and relaxed ordering is provided.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_acquire() there.h]hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_acquire() there.}(hj͓hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj9)}(h **Return**h]jz)}(hjޓh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܓubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_release (C function)c.atomic_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:int atomic_cmpxchg_release (atomic_t *v, int old, int new)h]h)}(h9int atomic_cmpxchg_release(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1hhhjChMubh)}(hatomic_cmpxchg_releaseh]h)}(hatomic_cmpxchg_releaseh]hatomic_cmpxchg_release}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjChMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjwmodnameN classnameNjcjf)}ji]jl)}j_jXsbc.atomic_cmpxchg_releaseasbuh1hhjnubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjjubj&)}(hint oldh](j)}(hinth]hint}(hjȔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĔubj=)}(h h]h }(hj֔hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjĔubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĔubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjjubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjjubeh}(h]h ]h"]h$]h&]jj uh1jhj1hhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjChMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhjChMhj*hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j[j4j[j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj~ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj{ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hj֕hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjҕhMhjӕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҕhMhj{ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjGhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh == }(hjGhhhNhNubjz)}(h**old**h]hold}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh), atomically updates }(hjGhhhNhNubjz)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh to }(hjGhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh# with release ordering. Otherwise, }(hjGhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh2 is not modified and relaxed ordering is provided.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_release() there.h]hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjÖhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj9)}(hThe original value of **v**.h](hThe original value of }(hjזhhhNhNubjz)}(h**v**h]hv}(hjߖhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjזubh.}(hjזhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_cmpxchg_relaxed (C function)c.atomic_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:int atomic_cmpxchg_relaxed (atomic_t *v, int old, int new)h]h)}(h9int atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj&hMubh)}(hatomic_cmpxchg_relaxedh]h)}(hatomic_cmpxchg_relaxedh]hatomic_cmpxchg_relaxed}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj&hMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jl)}j_j;sbc.atomic_cmpxchg_relaxedasbuh1hhjQubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjǗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܗubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjܗubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܗubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMhj hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjgh]h atomic_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj٘h]hint new}(hjۘhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjטubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjӘubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӘubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj*hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh == }(hj*hhhNhNubjz)}(h**old**h]hold}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh), atomically updates }(hj*hhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh to }(hj*hhhNhNubjz)}(h**new**h]hnew}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh# with relaxed ordering. Otherwise, }(hj*hhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh2 is not modified and relaxed ordering is provided.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there.h]hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj™hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_try_cmpxchg (C function)c.atomic_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8bool atomic_try_cmpxchg (atomic_t *v, int *old, int new)h]h)}(h7bool atomic_try_cmpxchg(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_try_cmpxchgh]h)}(hatomic_try_cmpxchgh]hatomic_try_cmpxchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_try_cmpxchgasbuh1hhj3ubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(hint newh](j)}(hinth]hint}(hjϚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˚ubj=)}(h h]h }(hjݚhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj˚ubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˚ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6$j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjVh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjțh]hint new}(hjʛhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjƛubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj›ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjݛhMhjޛubah}(h]h ]h"]h$]h&]uh1jhj›ubeh}(h]h ]h"]h$]h&]uh1jhjݛhMhjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj9)}(hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.h]hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjќhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj͜ubh if the exchange occurred, }(hj͜hhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj͜ubh otherwise.}(hj͜hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_acquire (C function)c.atomic_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_acquire (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj)hMubh)}(hatomic_try_cmpxchg_acquireh]h)}(hatomic_try_cmpxchg_acquireh]hatomic_try_cmpxchg_acquire}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj)hMubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj]modnameN classnameNjcjf)}ji]jl)}j_j>sbc.atomic_try_cmpxchg_acquireasbuh1hhjTubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjʝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjםhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj)hMhjhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjwh]h atomic_t *v}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjɞhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjŞhMhjƞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŞhMhjnubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj:hhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh == }(hj:hhhNhNubjz)}(h**old**h]hold}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh), atomically updates }(hj:hhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh to }(hj:hhhNhNubjz)}(h**new**h]hnew}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh# with acquire ordering. Otherwise, }(hj:hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh is not modified, }(hj:hhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh$ is updated to the current value of }(hj:hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh#, and relaxed ordering is provided.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there.}(hjǟhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRubj9)}(h **Return**h]jz)}(hj؟h]hReturn}(hjڟhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj֟ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_release (C function)c.atomic_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9hhhjJhMubh)}(hatomic_try_cmpxchg_releaseh]h)}(hatomic_try_cmpxchg_releaseh]hatomic_try_cmpxchg_release}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhjJhMubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj~modnameN classnameNjcjf)}ji]jl)}j_j_sbc.atomic_try_cmpxchg_releaseasbuh1hhjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(hint *oldh](j)}(hinth]hint}(hjϠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˠubj=)}(h h]h }(hjݠhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjˠubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˠubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjˠubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hnewh]hnew}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubeh}(h]h ]h"]h$]h&]jj uh1jhj9hhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhjJhMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhj2hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjThhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3joj4joj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjѡh]hint *old}(hjӡhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjϡubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjˡubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˡubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj h]hint new}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj[hhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh == }(hj[hhhNhNubjz)}(h**old**h]hold}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh), atomically updates }(hj[hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh to }(hj[hhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh# with release ordering. Otherwise, }(hj[hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh is not modified, }(hj[hhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh$ is updated to the current value of }(hj[hhhNhNubjz)}(h**v**h]hv}(hjϢhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh#, and relaxed ordering is provided.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj9)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjsubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjsubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_try_cmpxchg_relaxed (C function)c.atomic_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_relaxed (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhjkhM1ubh)}(hatomic_try_cmpxchg_relaxedh]h)}(hatomic_try_cmpxchg_relaxedh]hatomic_try_cmpxchg_relaxed}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjkhM1ubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_try_cmpxchg_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjˣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjأhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hnewh]hnew}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjkhM1ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjkhM1ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjkhM1hjShhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjuhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjkhM1ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjҤhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjΤhM2hjϤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΤhM2hjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj+h]hint new}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hj%ubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hM4hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj|hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh == }(hj|hhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh), atomically updates }(hj|hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh to }(hj|hhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh# with relaxed ordering. Otherwise, }(hj|hhhNhNubjz)}(h**v**h]hv}(hj̥hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh is not modified, }(hj|hhhNhNubjz)}(h**old**h]hold}(hjޥhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh$ is updated to the current value of }(hj|hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh#, and relaxed ordering is provided.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh if the exchange occurred, }(hj0hhhNhNubjz)}(h **false**h]hfalse}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh otherwise.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_sub_and_test (C function)c.atomic_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-bool atomic_sub_and_test (int i, atomic_t *v)h]h)}(h,bool atomic_sub_and_test(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{hhhjhMGubh)}(hatomic_sub_and_testh]h)}(hatomic_sub_and_testh]hatomic_sub_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhMGubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjɦhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjצhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_sub_and_testasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhMGubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjhMGhjthhubj )}(hhh]j9)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjShhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMGubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jnj4jnj5j6j7uh1hhhhj:hNhNubjp)}(hXC**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_sub_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjrubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjЧh]h atomic_t *v}(hjҧhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjΧubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjʧubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjʧubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubeh}(h]h ]h"]h$]h&]uh1jhjrubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjrubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj!hhhNhNubjz)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh to (}(hj!hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh - }(hj!hhhNhNubjz)}(h**i**h]hi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh) with full ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjrubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_sub_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_sub_and_test() there.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjrubj9)}(h **Return**h]jz)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjrubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is zero, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_dec_and_test (C function)c.atomic_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&bool atomic_dec_and_test (atomic_t *v)h]h)}(h%bool atomic_dec_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMZubh)}(hatomic_dec_and_testh]h)}(hatomic_dec_and_testh]hatomic_dec_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMZubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_dec_and_testasbuh1hhj&ubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hjh]hv}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMZubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMZhjhhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMZubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_dec_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjҩh]h atomic_t *v}(hjԩhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjЩubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hj̩ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhj̩ubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjɩubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj#hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh to (}(hj#hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh - 1) with full ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_dec_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_dec_and_test() there.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjubj9)}(h **Return**h]jz)}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh if the resulting value of }(hj}hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh is zero, }(hj}hhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh otherwise.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_inc_and_test (C function)c.atomic_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&bool atomic_inc_and_test (atomic_t *v)h]h)}(h%bool atomic_inc_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjުhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڪhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjڪhhhjhMlubh)}(hatomic_inc_and_testh]h)}(hatomic_inc_and_testh]hatomic_inc_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjڪhhhjhMlubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_inc_and_testasbuh1hhjubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjڪhhhjhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhj֪hhhjhMlubah}(h]jѪah ](jjeh"]h$]h&]jj)jhuh1hhjhMlhjӪhhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhj~hhubah}(h]h ]h"]h$]h&]uh1jhjӪhhhjhMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_inc_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj«h]h atomic_t *v}(hjīhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj۫hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj׫hMmhjثubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׫hMmhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_inc_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_inc_and_test() there.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh if the resulting value of }(hjmhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh is zero, }(hjmhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh otherwise.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_add_negative (C function)c.atomic_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-bool atomic_add_negative (int i, atomic_t *v)h]h)}(h,bool atomic_add_negative(int i, atomic_t *v)h](j)}(hjh]hbool}(hjάhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʬhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ubj=)}(h h]h }(hjܬhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʬhhhj۬hM~ubh)}(hatomic_add_negativeh]h)}(hatomic_add_negativeh]hatomic_add_negative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjʬhhhj۬hM~ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_add_negativeasbuh1hhj:ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hjh]hv}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjʬhhhj۬hM~ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƬhhhj۬hM~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj۬hM~hjìhhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjìhhhj۬hM~ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXB**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjǭh]h Parameters}(hjɭhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŭubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjݭubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjݭubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjphhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh to (}(hjphhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh + }(hjphhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh) with full ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_add_negative() there.h]hCUnsafe to use in noinstr code; use raw_atomic_add_negative() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjƮh]hReturn}(hjȮhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjĮubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܮubh if the resulting value of }(hjܮhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܮubh is negative, }(hjܮhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܮubh otherwise.}(hjܮhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_acquire (C function)c.atomic_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9hhhjJhMubh)}(hatomic_add_negative_acquireh]h)}(hatomic_add_negative_acquireh]hatomic_add_negative_acquire}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhjJhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j_sbc.atomic_add_negative_acquireasbuh1hhjubj=)}(h h]h }(hjЯhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjޯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubeh}(h]h ]h"]h$]h&]jj uh1jhj9hhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhjJhMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhj2hhubj )}(hhh]j9)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj:hNhNubjp)}(hXM**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjUh]hint i}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubeh}(h]h ]h"]h$]h&]uh1jhj0ubj9)}(h**Description**h]jz)}(hjɰh]h Description}(hj˰hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǰubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj߰hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߰ubh to (}(hj߰hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߰ubh + }(hj߰hhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߰ubh) with acquire ordering.}(hj߰hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj9)}(h **Return**h]jz)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh if the resulting value of }(hjKhhhNhNubjz)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh is negative, }(hjKhhhNhNubjz)}(h **false**h]hfalse}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh otherwise.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_release (C function)c.atomic_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_release (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_release(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_add_negative_releaseh]h)}(hatomic_add_negative_releaseh]hatomic_add_negative_release}(hj̱hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȱubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jl)}j_jαsbc.atomic_add_negative_releaseasbuh1hhjubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXM**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative_release() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjIJh]hint i}(hjƲhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj²ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjݲhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjٲhMhjڲubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٲhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjNhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh to (}(hjNhhhNhNubjz)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh + }(hjNhhhNhNubjz)}(h**i**h]hi}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh) with release ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjгhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_add_negative_relaxed (C function)c.atomic_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj(hMubh)}(hatomic_add_negative_relaxedh]h)}(hatomic_add_negative_relaxedh]hatomic_add_negative_relaxed}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hjh]hi}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j=sbc.atomic_add_negative_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjɴhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj(hMhjhhubj )}(hhh]j9)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hXM**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hj3h]hint i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjlh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjŵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj׵hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh if the resulting value of }(hj)hhhNhNubjz)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh is negative, }(hj)hhhNhNubjz)}(h **false**h]hfalse}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh otherwise.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_fetch_add_unless (C function)c.atomic_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h7int atomic_fetch_add_unless (atomic_t *v, int a, int u)h]h)}(h6int atomic_fetch_add_unless(atomic_t *v, int a, int u)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_fetch_add_unlessh]h)}(hatomic_fetch_add_unlessh]hatomic_fetch_add_unless}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_t *v, int a, int u)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjʶhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǶubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj̶modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_fetch_add_unlessasbuh1hhjöubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjöubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjöubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjöubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hah]ha}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint uh](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNubh)}(hj‰h]hu}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int a`` int value to add ``int u`` int value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjطh]h atomic_t *v}(hjڷhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjַubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjҷubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjҷubeh}(h]h ]h"]h$]h&]uh1jhjhMhjϷubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j?)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjϷubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j?)}(hjJh]hint u}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjDubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjϷubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != }(hjhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjǸhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjٸhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh!) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hj'h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj=hhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_add_unless (C function)c.atomic_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2bool atomic_add_unless (atomic_t *v, int a, int u)h]h)}(h1bool atomic_add_unless(atomic_t *v, int a, int u)h](j)}(hjh]hbool}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzhhhjhMubh)}(hatomic_add_unlessh]h)}(hatomic_add_unlessh]hatomic_add_unless}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjhMubj )}(h(atomic_t *v, int a, int u)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_add_unlessasbuh1hhjubj=)}(h h]h }(hjݹhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hj;h]ha}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint uh](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hj‰h]hu}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjzhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjshhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int a`` int value to add ``int u`` int value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_add_unless() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjʺh]h atomic_t *v}(hj̺hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjȺubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjĺubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjߺhMhjubah}(h]h ]h"]h$]h&]uh1jhjĺubeh}(h]h ]h"]h$]h&]uh1jhjߺhMhjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j?)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j?)}(hj<h]hint u}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != }(hjhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj˻hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**a**h]ha}(hjݻhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh!) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hAUnsafe to use in noinstr code; use raw_atomic_add_unless() there.h]hAUnsafe to use in noinstr code; use raw_atomic_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh if }(hj/hhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh was updated, }(hj/hhhNhNubjz)}(h **false**h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh otherwise.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_inc_not_zero (C function)c.atomic_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&bool atomic_inc_not_zero (atomic_t *v)h]h)}(h%bool atomic_inc_not_zero(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_inc_not_zeroh]h)}(hatomic_inc_not_zeroh]hatomic_inc_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjϼhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̼ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjѼmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_inc_not_zeroasbuh1hhjȼubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjȼubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȼubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjȼubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjļubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj:hNhNubjp)}(hX]**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjth]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjŽhhhNhNubjz)}(h**v**h]hv}(hjͽhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŽubh != 0), atomically updates }(hjŽhhhNhNubjz)}(h**v**h]hv}(hj߽hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŽubh to (}(hjŽhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŽubh% + 1) with full ordering. Otherwise, }(hjŽhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŽubh2 is not modified and relaxed ordering is provided.}(hjŽhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.h]hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh if }(hjChhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh was updated, }(hjChhhNhNubjz)}(h **false**h]hfalse}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh otherwise.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_inc_unless_negative (C function)c.atomic_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-bool atomic_inc_unless_negative (atomic_t *v)h]h)}(h,bool atomic_inc_unless_negative(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_inc_unless_negativeh]h)}(hatomic_inc_unless_negativeh]hatomic_inc_unless_negative}(hjľhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jƾsbc.atomic_inc_unless_negativeasbuh1hhjܾubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjܾubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܾubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܾubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjؾubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj:hNhNubjp)}(hXd**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjcubj9)}(h**Description**h]jz)}(hjÿh]h Description}(hjſhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjcubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjٿhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٿubh >= 0), atomically updates }(hjٿhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٿubh to (}(hjٿhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٿubh% + 1) with full ordering. Otherwise, }(hjٿhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٿubh2 is not modified and relaxed ordering is provided.}(hjٿhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjcubj9)}(hJUnsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there.h]hJUnsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh if }(hjWhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh was updated, }(hjWhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh otherwise.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic_dec_unless_positive (C function)c.atomic_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-bool atomic_dec_unless_positive (atomic_t *v)h]h)}(h,bool atomic_dec_unless_positive(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_dec_unless_positiveh]h)}(hatomic_dec_unless_positiveh]hatomic_dec_unless_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_dec_unless_positiveasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhj:hNhNubjp)}(hXd**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh <= 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(hJUnsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there.h]hJUnsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(h **Return**h]jz)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjwubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh if }(hjkhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh was updated, }(hjkhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh otherwise.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_dec_if_positive (C function)c.atomic_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(int atomic_dec_if_positive (atomic_t *v)h]h)}(h'int atomic_dec_if_positive(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM+ubh)}(hatomic_dec_if_positiveh]h)}(hatomic_dec_if_positiveh]hatomic_dec_if_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM+ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_dec_if_positiveasbuh1hhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM+hjhhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXr**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_dec_if_positive() there. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh > 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_dec_if_positive() there.h]hFUnsafe to use in noinstr code; use raw_atomic_dec_if_positive() there.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj9)}(h **Return**h]jz)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1), regardless of whether }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_read (C function)c.atomic64_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h's64 atomic64_read (const atomic64_t *v)h]h)}(h&s64 atomic64_read(const atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_ atomic64_readsbc.atomic64_readasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM>ubh)}(h atomic64_readh]h)}(hjh]h atomic64_read}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM>ubj )}(h(const atomic64_t *v)h]j&)}(hconst atomic64_t *vh](j+)}(hj<*h]hconst}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj!ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jc.atomic64_readasbuh1hhj!ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hjh]hv}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM>hjhhubj )}(hhh]j9)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic64_t *v`` pointer to atomic64_t **Description** Atomically loads the value of **v** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_read() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]j?)}(hjh]hconst atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj7hhhNhNubjz)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh with relaxed ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjubj9)}(h=Unsafe to use in noinstr code; use raw_atomic64_read() there.h]h=Unsafe to use in noinstr code; use raw_atomic64_read() there.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_read_acquire (C function)c.atomic64_read_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_read_acquire (const atomic64_t *v)h]h)}(h.s64 atomic64_read_acquire(const atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_read_acquiresbc.atomic64_read_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMOubh)}(hatomic64_read_acquireh]h)}(hjh]hatomic64_read_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMOubj )}(h(const atomic64_t *v)h]j&)}(hconst atomic64_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jc.atomic64_read_acquireasbuh1hhjubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMOhjhhubj )}(hhh]j9)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic64_t *v`` pointer to atomic64_t **Description** Atomically loads the value of **v** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_read_acquire() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]j?)}(hjh]hconst atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj$hhhNhNubjz)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh with acquire ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_read_acquire() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_read_acquire() there.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjlhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_set (C function)c.atomic64_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void atomic64_set (atomic64_t *v, s64 i)h]h)}(h'void atomic64_set(atomic64_t *v, s64 i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM`ubh)}(h atomic64_seth]h)}(h atomic64_seth]h atomic64_set}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM`ubj )}(h(atomic64_t *v, s64 i)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic64_setasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]j c.atomic64_setasbuh1hhj<ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubh)}(hjh]hi}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM`ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM`ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM`hjhhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM`ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 i`` s64 value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_set() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMbhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjchhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh to }(hjchhhNhNubjz)}(h**i**h]hi}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh with relaxed ordering.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubj9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMshj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMshjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j?)}(hjQh]hs64 i}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjKubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMthjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMthjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjubj9)}(hDUnsafe to use in noinstr code; use raw_atomic64_set_release() there.h]hDUnsafe to use in noinstr code; use raw_atomic64_set_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_add (C function)c.atomic64_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void atomic64_add (s64 i, atomic64_t *v)h]h)}(h'void atomic64_add(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj9hMubh)}(h atomic64_addh]h)}(h atomic64_addh]h atomic64_add}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl)}j_jNsbc.atomic64_addasbuh1hhjdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj9hMhj hhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j.j4j.j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_add() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjWh]hs64 i}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjNubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjEhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh to (}(hjEhhhNhNubjz)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh + }(hjEhhhNhNubjz)}(h**i**h]hi}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh) with full ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic64_add_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_add_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_add_return_acquire (C function)c.atomic64_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_add_return_acquire (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_add_return_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_add_return_acquiresbc.atomic64_add_return_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_add_return_acquireh]h)}(hjh]hatomic64_add_return_acquire}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jc.atomic64_add_return_acquireasbuh1hhj@ubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hjh]hi}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_add_return_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_add_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj1h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjjh]h atomic64_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjdubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_add_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_add_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj'hhhNhNubjz)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_add_return_release (C function)c.atomic64_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_add_return_release (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_add_return_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl)}j_atomic64_add_return_releasesbc.atomic64_add_return_releaseasbuh1hhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdhhhjhMubh)}(hatomic64_add_return_releaseh]h)}(hjh]hatomic64_add_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_add_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_add_return_releaseasbuh1hhjubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjdhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjhMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj]hhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_add_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj1hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh to (}(hj1hhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh + }(hj1hhhNhNubjz)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh) with release ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_add_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_add_return_release() there.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_add_return_relaxed (C function)c.atomic64_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_add_return_relaxed (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_add_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_add_return_relaxedsbc.atomic64_add_return_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_add_return_relaxedh]h)}(hjh]hatomic64_add_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jc.atomic64_add_return_relaxedasbuh1hhj,ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubh)}(hjh]hi}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jc.atomic64_add_return_relaxedasbuh1hhjsubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_add_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjVh]h atomic64_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_add_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_add_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_add (C function)c.atomic64_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-s64 atomic64_fetch_add (s64 i, atomic64_t *v)h]h)}(h,s64 atomic64_fetch_add(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_addsbc.atomic64_fetch_addasbuh1hhjPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPhhhjxhMubh)}(hatomic64_fetch_addh]h)}(hjuh]hatomic64_fetch_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjxhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jsc.atomic64_fetch_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jsc.atomic64_fetch_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjPhhhjxhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjxhMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhjIhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjxhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_add() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_add() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_add() there.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj9)}(h **Return**h]jz)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_acquire (C function)c.atomic64_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_add_acquire (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_add_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_add_acquiresbc.atomic64_fetch_add_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_fetch_add_acquireh]h)}(hjh]hatomic64_fetch_add_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jc.atomic64_fetch_add_acquireasbuh1hhjubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjhmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_add_acquireasbuh1hhj_ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_add_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjBh]h atomic64_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhMhjXubah}(h]h ]h"]h$]h&]uh1*jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_release (C function)c.atomic64_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_add_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_add_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_add_releasesbc.atomic64_fetch_add_releaseasbuh1hhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<hhhjdhMubh)}(hatomic64_fetch_add_releaseh]h)}(hjah]hatomic64_fetch_add_release}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjdhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j_c.atomic64_fetch_add_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j_c.atomic64_fetch_add_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjdhMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhjdhMhj5hhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjdhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_add_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjyubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh + }(hj hhhNhNubjz)}(h**i**h]hi}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_release() there.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj9)}(h **Return**h]jz)}(hj_h]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZubj9)}(hThe original value of **v**.h](hThe original value of }(hjuhhhNhNubjz)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_add_relaxed (C function)c.atomic64_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_add_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_add_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_add_relaxedsbc.atomic64_fetch_add_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_fetch_add_relaxedh]h)}(hjh]hatomic64_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.atomic64_fetch_add_relaxedasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_add_relaxedasbuh1hhjKubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_add_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj.h]h atomic64_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_add_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_sub (C function)c.atomic64_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void atomic64_sub (s64 i, atomic64_t *v)h]h)}(h'void atomic64_sub(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(hhhj:hM+ubh)}(h atomic64_subh]h)}(h atomic64_subh]h atomic64_sub}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj:hM+ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_jOsbc.atomic64_subasbuh1hhjeubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_subasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj:hM+ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj:hM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj:hM+hj!hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hM+ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_sub() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj3ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjXh]hs64 i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjRubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhM,hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM,hjOubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj3ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj3ubj9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM?hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh to (}(hjFhhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh - }(hjFhhhNhNubjz)}(h**i**h]hi}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh) with full ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic64_sub_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_sub_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_acquire (C function)c.atomic64_sub_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_acquire (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_sub_return_acquiresbc.atomic64_sub_return_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMPubh)}(hatomic64_sub_return_acquireh]h)}(hjh]hatomic64_sub_return_acquire}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMPubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jc.atomic64_sub_return_acquireasbuh1hhjAubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(hjh]hi}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_sub_return_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMPubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMPubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMPhjhhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMPubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThj ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj2h]hs64 i}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhj,ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMQhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMQhj)ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjkh]h atomic64_t *v}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjeubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMRhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThj ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj ubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhj ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj(hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_release (C function)c.atomic64_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_release (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_atomic64_sub_return_releasesbc.atomic64_sub_return_releaseasbuh1hhjehhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhjhMbubh)}(hatomic64_sub_return_releaseh]h)}(hjh]hatomic64_sub_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjhMbubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_sub_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_sub_return_releaseasbuh1hhjubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhjhMbubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjhMbubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhjhMbhj^hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjdhhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjhMbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj2hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh to (}(hj2hhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh - }(hj2hhhNhNubjz)}(h**i**h]hi}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh) with release ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_release() there.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_sub_return_relaxed (C function)c.atomic64_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_relaxed (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_sub_return_relaxedsbc.atomic64_sub_return_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMuubh)}(hatomic64_sub_return_relaxedh]h)}(hjh]hatomic64_sub_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMuubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj6modnameN classnameNjcjf)}ji]jc.atomic64_sub_return_relaxedasbuh1hhj-ubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hjh]hi}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj}modnameN classnameNjcjf)}ji]jc.atomic64_sub_return_relaxedasbuh1hhjtubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMuhjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMvhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMvhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjWh]h atomic64_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjQubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMwhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_sub (C function)c.atomic64_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-s64 atomic64_fetch_sub (s64 i, atomic64_t *v)h]h)}(h,s64 atomic64_fetch_sub(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_subsbc.atomic64_fetch_subasbuh1hhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQhhhjyhMubh)}(hatomic64_fetch_subh]h)}(hjvh]hatomic64_fetch_sub}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjyhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jtc.atomic64_fetch_subasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jtc.atomic64_fetch_subasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhjyhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjyhMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjyhMhjJhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjyhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_sub() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_sub() there.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_acquire (C function)c.atomic64_fetch_sub_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_sub_acquire (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_sub_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_sub_acquiresbc.atomic64_fetch_sub_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_fetch_sub_acquireh]h)}(hjh]hatomic64_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jc.atomic64_fetch_sub_acquireasbuh1hhjubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjimodnameN classnameNjcjf)}ji]jc.atomic64_fetch_sub_acquireasbuh1hhj`ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjCh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_release (C function)c.atomic64_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_sub_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_sub_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_sub_releasesbc.atomic64_fetch_sub_releaseasbuh1hhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=hhhjehMubh)}(hatomic64_fetch_sub_releaseh]h)}(hjbh]hatomic64_fetch_sub_release}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjehMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j`c.atomic64_fetch_sub_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j`c.atomic64_fetch_sub_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj=hhhjehMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjehMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhjehMhj6hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjehMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh - }(hj hhhNhNubjz)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hThe original value of **v**.h](hThe original value of }(hjvhhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_sub_relaxed (C function)c.atomic64_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_sub_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_sub_relaxedsbc.atomic64_fetch_sub_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_fetch_sub_relaxedh]h)}(hjh]hatomic64_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_sub_relaxedasbuh1hhjubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_sub_relaxedasbuh1hhjLubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj/h]h atomic64_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj)ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_inc (C function)c.atomic64_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h!void atomic64_inc (atomic64_t *v)h]h)}(h void atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj;hMubh)}(h atomic64_inch]h)}(h atomic64_inch]h atomic64_inc}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjomodnameN classnameNjcjf)}ji]jl)}j_jPsbc.atomic64_incasbuh1hhjfubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubah}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj"hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_inc() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjchhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh to (}(hjchhhNhNubjz)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh + 1) with relaxed ordering.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]j c.atomic64_inc_returnasbuh1hhj:ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hjh]hv}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj6ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj5hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh to (}(hj5hhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh + 1) with full ordering.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic64_inc_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_inc_return() there.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_inc_return_acquire (C function)c.atomic64_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_inc_return_acquire (atomic64_t *v)h]h)}(h.s64 atomic64_inc_return_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_inc_return_acquiresbc.atomic64_inc_return_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_inc_return_acquireh]h)}(hjh]hatomic64_inc_return_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj'modnameN classnameNjcjf)}ji]jc.atomic64_inc_return_acquireasbuh1hhjubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_acquire() there.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjshhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_inc_return_release (C function)c.atomic64_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_inc_return_release (atomic64_t *v)h]h)}(h.s64 atomic64_inc_return_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_inc_return_releasesbc.atomic64_inc_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_inc_return_releaseh]h)}(hjh]hatomic64_inc_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.atomic64_inc_return_releaseasbuh1hhjubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_release() there.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjWhhhNhNubjz)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_inc_return_relaxed (C function)c.atomic64_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_inc_return_relaxed (atomic64_t *v)h]h)}(h.s64 atomic64_inc_return_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_inc_return_relaxedsbc.atomic64_inc_return_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_inc_return_relaxedh]h)}(hjh]hatomic64_inc_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_inc_return_relaxedasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj9)}(h **Return**h]jz)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj;hhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_inc (C function)c.atomic64_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_inc (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_inc(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_incsbc.atomic64_fetch_incasbuh1hhjxhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxhhhjhM(ubh)}(hatomic64_fetch_inch]h)}(hjh]hatomic64_fetch_inc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhM(ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_incasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjxhhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjhM(ubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1hhjhM(hjqhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hj0hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjOubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjth]h atomic64_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjnubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjkubah}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjOubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjOubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjOubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjOubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_acquire (C function)c.atomic64_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_acquire (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_inc_acquiresbc.atomic64_fetch_inc_acquireasbuh1hhj\hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\hhhjhM:ubh)}(hatomic64_fetch_inc_acquireh]h)}(hjh]hatomic64_fetch_inc_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj\hhhjhM:ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_fetch_inc_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj\hhhjhM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjXhhhjhM:ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjhM:hjUhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjhM:ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hj3ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjXh]h atomic64_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjRubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhM;hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM;hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hj3ubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj3ubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hj3ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj3ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_release (C function)c.atomic64_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_release (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_inc_releasesbc.atomic64_fetch_inc_releaseasbuh1hhj@hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@hhhjhhMKubh)}(hatomic64_fetch_inc_releaseh]h)}(hjeh]hatomic64_fetch_inc_release}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhjhhMKubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jcc.atomic64_fetch_inc_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj@hhhjhhMKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhjhhMKubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhjhhMKhj9hhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjhhMKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj<h]h atomic64_t *v}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj6ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhMLhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMLhj3ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_inc_relaxed (C function)c.atomic64_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_relaxed (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_inc_relaxedsbc.atomic64_fetch_inc_relaxedasbuh1hhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$hhhjLhM]ubh)}(hatomic64_fetch_inc_relaxedh]h)}(hjIh]hatomic64_fetch_inc_relaxed}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhjLhM]ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jGc.atomic64_fetch_inc_relaxedasbuh1hhjvubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjrubah}(h]h ]h"]h$]h&]jj uh1jhj$hhhjLhM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhjLhM]ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjLhM]hjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjLhM]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj h]h atomic64_t *v}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hj ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5 hM^hj6 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj5 hM^hj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj[ h]h Description}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjY ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjq hhhNhNubjz)}(h**v**h]hv}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq ubh to (}(hjq hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq ubh + 1) with relaxed ordering.}(hjq hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_dec (C function)c.atomic64_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h!void atomic64_dec (atomic64_t *v)h]h)}(h void atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hMnubh)}(h atomic64_dech]h)}(h atomic64_dech]h atomic64_dec}(hj- hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj) ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMnubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjL hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjN modnameN classnameNjcjf)}ji]jl)}j_j/ sbc.atomic64_decasbuh1hhjE ubj=)}(h h]h }(hjl hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjE ubj)}(hjh]h*}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjA ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMnubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMnubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMnhj hhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMnubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_dec() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMohj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMohj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj, h]h Description}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj* ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj ubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjB hhhNhNubjz)}(h**v**h]hv}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB ubh to (}(hjB hhhNhNubjz)}(h**v**h]hv}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB ubh - 1) with relaxed ordering.}(hjB hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj ubj9)}(h hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjY hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhj hhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh - 1) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(h **Return**h]jz)}(hjX h]hReturn}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjV ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjn hhhNhNubjz)}(h**v**h]hv}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn ubh.}(hjn hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_dec_return_acquire (C function)c.atomic64_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_acquire (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_atomic64_dec_return_acquiresbc.atomic64_dec_return_acquireasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hMubh)}(hatomic64_dec_return_acquireh]h)}(hj h]hatomic64_dec_return_acquire}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.atomic64_dec_return_acquireasbuh1hhj ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhj hhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjRhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_dec_return_release (C function)c.atomic64_dec_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_release (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_dec_return_releasesbc.atomic64_dec_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic64_dec_return_releaseh]h)}(hjh]hatomic64_dec_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_dec_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jbj4jbj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic64_dec_return_relaxed (C function)c.atomic64_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_relaxed (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jl)}j_atomic64_dec_return_relaxedsbc.atomic64_dec_return_relaxedasbuh1hhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjshhhjhMubh)}(hatomic64_dec_return_relaxedh]h)}(hjh]hatomic64_dec_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.atomic64_dec_return_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjlhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjoh]h atomic64_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj9)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_dec (C function)c.atomic64_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_dec (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_dec(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj`modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_decsbc.atomic64_fetch_decasbuh1hhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWhhhjhMubh)}(hatomic64_fetch_dech]h)}(hj|h]hatomic64_fetch_dec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jzc.atomic64_fetch_decasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjWhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjhMubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjPhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjSh]h atomic64_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_dec() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_dec() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_acquire (C function)c.atomic64_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_acquire (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_dec_acquiresbc.atomic64_fetch_dec_acquireasbuh1hhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;hhhjchMubh)}(hatomic64_fetch_dec_acquireh]h)}(hj`h]hatomic64_fetch_dec_acquire}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;hhhjchMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j^c.atomic64_fetch_dec_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj;hhhjchMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhjchMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1hhjchMhj4hhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjchMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj7h]h atomic64_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_release (C function)c.atomic64_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_release (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_dec_releasesbc.atomic64_fetch_dec_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjGhMubh)}(hatomic64_fetch_dec_releaseh]h)}(hjDh]hatomic64_fetch_dec_release}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjGhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzmodnameN classnameNjcjf)}ji]jBc.atomic64_fetch_dec_releaseasbuh1hhjqubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjGhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjGhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjGhMhjhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjGhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjlhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh to (}(hjlhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh - 1) with release ordering.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_dec_relaxed (C function)c.atomic64_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_relaxed (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_dec_relaxedsbc.atomic64_fetch_dec_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj+hMubh)}(hatomic64_fetch_dec_relaxedh]h)}(hj(h]hatomic64_fetch_dec_relaxed}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]j&c.atomic64_fetch_dec_relaxedasbuh1hhjUubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj+hMhjhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjPhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh to (}(hjPhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh - 1) with relaxed ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_and (C function)c.atomic64_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void atomic64_and (s64 i, atomic64_t *v)h]h)}(h'void atomic64_and(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(h atomic64_andh]h)}(h atomic64_andh]h atomic64_and}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic64_andasbuh1hhj$ubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubh)}(hjh]hi}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjvmodnameN classnameNjcjf)}ji]jGc.atomic64_andasbuh1hhjmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_and() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjPh]h atomic64_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjJubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hjVubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_and() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_and() there.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjVubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hjVubj9)}(hThe original value of **v**.h](hThe original value of }(hjqhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM% hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_and_acquire (C function)c.atomic64_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_and_acquire (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_and_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_and_acquiresbc.atomic64_fetch_and_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM0 ubh)}(hatomic64_fetch_and_acquireh]h)}(hjh]hatomic64_fetch_and_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM0 ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.atomic64_fetch_and_acquireasbuh1hhj ubj=)}(h h]h }(hj% hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj3 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjN hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjP modnameN classnameNjcjf)}ji]jc.atomic64_fetch_and_acquireasbuh1hhjG ubj=)}(h h]h }(hjl hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjG ubj)}(hjh]h*}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM0 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM0 ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM0 hjhhubj )}(hhh]j9)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_and_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hj ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hj ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hM1 hj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hM1 hj ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj*!h]h atomic64_t *v}(hj,!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(!ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hj$!ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjC!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?!hM2 hj@!ubah}(h]h ]h"]h$]h&]uh1jhj$!ubeh}(h]h ]h"]h$]h&]uh1jhj?!hM2 hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hje!h]h Description}(hjg!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hj ubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hj{!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{!ubh to (}(hj{!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{!ubh & }(hj{!hhhNhNubjz)}(h**i**h]hi}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{!ubh) with acquire ordering.}(hj{!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hj ubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_acquire() there.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5 hj ubj9)}(h **Return**h]jz)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8 hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_and_release (C function)c.atomic64_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_and_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_and_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj+"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj("ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-"modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_and_releasesbc.atomic64_fetch_and_releaseasbuh1hhj$"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB ubj=)}(h h]h }(hjM"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$"hhhjL"hMB ubh)}(hatomic64_fetch_and_releaseh]h)}(hjI"h]hatomic64_fetch_and_release}(hj_"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj["ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$"hhhjL"hMB ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj}"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jG"c.atomic64_fetch_and_releaseasbuh1hhjv"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjv"ubh)}(hjh]hi}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjr"ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jG"c.atomic64_fetch_and_releaseasbuh1hhj"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hjh]hv}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjr"ubeh}(h]h ]h"]h$]h&]jj uh1jhj$"hhhjL"hMB ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj "hhhjL"hMB ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1hhjL"hMB hj"hhubj )}(hhh]j9)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB hj##hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhjL"hMB ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>#j4j>#j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_and_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjH#h]h Parameters}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjB#ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjg#h]hs64 i}(hji#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hje#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMC hja#ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|#hMC hj}#ubah}(h]h ]h"]h$]h&]uh1jhja#ubeh}(h]h ]h"]h$]h&]uh1jhj|#hMC hj^#ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj#h]h atomic64_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hj#ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMD hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMD hj^#ubeh}(h]h ]h"]h$]h&]uh1jhjB#ubj9)}(h**Description**h]jz)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjB#ubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh to (}(hj#hhhNhNubjz)}(h**v**h]hv}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh & }(hj#hhhNhNubjz)}(h**i**h]hi}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh) with release ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjB#ubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_release() there.}(hj6$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjB#ubj9)}(h **Return**h]jz)}(hjG$h]hReturn}(hjI$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE$ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hjB#ubj9)}(hThe original value of **v**.h](hThe original value of }(hj]$hhhNhNubjz)}(h**v**h]hv}(hje$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]$ubh.}(hj]$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjB#ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_and_relaxed (C function)c.atomic64_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_and_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_and_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_and_relaxedsbc.atomic64_fetch_and_relaxedasbuh1hhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$hhhj$hMU ubh)}(hatomic64_fetch_and_relaxedh]h)}(hj$h]hatomic64_fetch_and_relaxed}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj$hMU ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$modnameN classnameNjcjf)}ji]j$c.atomic64_fetch_and_relaxedasbuh1hhj$ubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubh)}(hjh]hi}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj:%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7%ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<%modnameN classnameNjcjf)}ji]j$c.atomic64_fetch_and_relaxedasbuh1hhj3%ubj=)}(h h]h }(hjX%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3%ubj)}(hjh]h*}(hjf%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3%ubh)}(hjh]hv}(hjs%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubeh}(h]h ]h"]h$]h&]jj uh1jhj$hhhj$hMU ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj$hMU ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhj$hMU hj$hhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hMU ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j%j4j%j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj%ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj%h]hs64 i}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hj%ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMV hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMV hj%ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj&h]h atomic64_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hj&ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+&hMW hj,&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj+&hMW hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubj9)}(h**Description**h]jz)}(hjQ&h]h Description}(hjS&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO&ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj%ubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjg&hhhNhNubjz)}(h**v**h]hv}(hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg&ubh to (}(hjg&hhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg&ubh & }(hjg&hhhNhNubjz)}(h**i**h]hi}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg&ubh) with relaxed ordering.}(hjg&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hj%ubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_and_relaxed() there.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hj%ubj9)}(h **Return**h]jz)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hj%ubj9)}(hThe original value of **v**.h](hThe original value of }(hj&hhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_andnot (C function)c.atomic64_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+void atomic64_andnot (s64 i, atomic64_t *v)h]h)}(h*void atomic64_andnot(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg ubj=)}(h h]h }(hj#'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj"'hMg ubh)}(hatomic64_andnoth]h)}(hatomic64_andnoth]hatomic64_andnot}(hj5'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj"'hMg ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjT'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjV'modnameN classnameNjcjf)}ji]jl)}j_j7'sbc.atomic64_andnotasbuh1hhjM'ubj=)}(h h]h }(hjt'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjM'ubh)}(hjh]hi}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjM'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjI'ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj'modnameN classnameNjcjf)}ji]jp'c.atomic64_andnotasbuh1hhj'ubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hjh]hv}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjI'ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj"'hMg ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj 'hhhj"'hMg ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1hhj"'hMg hj 'hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg hj'hhubah}(h]h ]h"]h$]h&]uh1jhj 'hhhj"'hMg ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_andnot() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj!(h]h Parameters}(hj#(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hj(ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj@(h]hs64 i}(hjB(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hj:(ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjY(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjU(hMh hjV(ubah}(h]h ]h"]h$]h&]uh1jhj:(ubeh}(h]h ]h"]h$]h&]uh1jhjU(hMh hj7(ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjy(h]h atomic64_t *v}(hj{(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjw(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hjs(ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMi hj(ubah}(h]h ]h"]h$]h&]uh1jhjs(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMi hj7(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hj(ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj(hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh to (}(hj(hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh & }(hj(hhhNhNubjz)}(h**~i**h]h~i}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh) with relaxed ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hj(ubj9)}(h?Unsafe to use in noinstr code; use raw_atomic64_andnot() there.h]h?Unsafe to use in noinstr code; use raw_atomic64_andnot() there.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hj(ubj9)}(h **Return**h]jz)}(hj )h]hReturn}(hj")hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hj(ubj9)}(hNothing.h]hNothing.}(hj6)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_fetch_andnot (C function)c.atomic64_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0s64 atomic64_fetch_andnot (s64 i, atomic64_t *v)h]h)}(h/s64 atomic64_fetch_andnot(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjh)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjj)modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_andnotsbc.atomic64_fetch_andnotasbuh1hhja)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hja)hhhj)hMy ubh)}(hatomic64_fetch_andnoth]h)}(hj)h]hatomic64_fetch_andnot}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhja)hhhj)hMy ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]j)c.atomic64_fetch_andnotasbuh1hhj)ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubh)}(hjh]hi}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj*modnameN classnameNjcjf)}ji]j)c.atomic64_fetch_andnotasbuh1hhj)ubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubj)}(hjh]h*}(hj-*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hjh]hv}(hj:*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)ubeh}(h]h ]h"]h$]h&]jj uh1jhja)hhhj)hMy ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj])hhhj)hMy ubah}(h]jX)ah ](jjeh"]h$]h&]jj)jhuh1hhj)hMy hjZ)hhubj )}(hhh]j9)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjc*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hj`*hhubah}(h]h ]h"]h$]h&]uh1jhjZ)hhhj)hMy ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{*j4j{*j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_andnot() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj*ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj*h]hs64 i}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hj*ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMz hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMz hj*ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj*h]h atomic64_t *v}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hj*ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hM{ hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM{ hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj*ubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hj.+hhhNhNubjz)}(h**v**h]hv}(hj6+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.+ubh to (}(hj.+hhhNhNubjz)}(h**v**h]hv}(hjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.+ubh & }(hj.+hhhNhNubjz)}(h**~i**h]h~i}(hjZ+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.+ubh) with full ordering.}(hj.+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hj*ubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot() there.}(hjs+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hj*ubj9)}(h **Return**h]jz)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj*ubj9)}(hThe original value of **v**.h](hThe original value of }(hj+hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_acquire (C function)c.atomic64_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 atomic64_fetch_andnot_acquire (s64 i, atomic64_t *v)h]h)}(h7s64 atomic64_fetch_andnot_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_andnot_acquiresbc.atomic64_fetch_andnot_acquireasbuh1hhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+hhhj+hM ubh)}(hatomic64_fetch_andnot_acquireh]h)}(hj+h]hatomic64_fetch_andnot_acquire}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj+hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj0,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2,modnameN classnameNjcjf)}ji]j+c.atomic64_fetch_andnot_acquireasbuh1hhj),ubj=)}(h h]h }(hjN,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj),ubh)}(hjh]hi}(hj\,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj),ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%,ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjw,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjy,modnameN classnameNjcjf)}ji]j+c.atomic64_fetch_andnot_acquireasbuh1hhjp,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjp,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp,ubh)}(hjh]hv}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjp,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%,ubeh}(h]h ]h"]h$]h&]jj uh1jhj+hhhj+hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj+hM ubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhj+hM hj+hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_andnot_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj-h]hs64 i}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj-ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/-hM hj0-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj/-hM hj-ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjS-h]h atomic64_t *v}(hjU-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjM-ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjl-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh-hM hji-ubah}(h]h ]h"]h$]h&]uh1jhjM-ubeh}(h]h ]h"]h$]h&]uh1jhjh-hM hj-ubeh}(h]h ]h"]h$]h&]uh1jhj,ubj9)}(h**Description**h]jz)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh to (}(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh & }(hj-hhhNhNubjz)}(h**~i**h]h~i}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh) with acquire ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_acquire() there.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj9)}(hThe original value of **v**.h](hThe original value of }(hj.hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_release (C function)c.atomic64_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 atomic64_fetch_andnot_release (s64 i, atomic64_t *v)h]h)}(h7s64 atomic64_fetch_andnot_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjT.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQ.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjV.modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_andnot_releasesbc.atomic64_fetch_andnot_releaseasbuh1hhjM.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjv.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjM.hhhju.hM ubh)}(hatomic64_fetch_andnot_releaseh]h)}(hjr.h]hatomic64_fetch_andnot_release}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjM.hhhju.hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj.modnameN classnameNjcjf)}ji]jp.c.atomic64_fetch_andnot_releaseasbuh1hhj.ubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hjh]hi}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj.modnameN classnameNjcjf)}ji]jp.c.atomic64_fetch_andnot_releaseasbuh1hhj.ubj=)}(h h]h }(hj /hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hjh]hv}(hj&/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubeh}(h]h ]h"]h$]h&]jj uh1jhjM.hhhju.hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjI.hhhju.hM ubah}(h]jD.ah ](jjeh"]h$]h&]jj)jhuh1hhju.hM hjF.hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjO/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjL/hhubah}(h]h ]h"]h$]h&]uh1jhjF.hhhju.hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jg/j4jg/j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_andnot_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjq/h]h Parameters}(hjs/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo/ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj/h]hs64 i}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj/ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj/h]h atomic64_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj/ubeh}(h]h ]h"]h$]h&]uh1jhjk/ubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hj0hhhNhNubjz)}(h**v**h]hv}(hj"0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh to (}(hj0hhhNhNubjz)}(h**v**h]hv}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh & }(hj0hhhNhNubjz)}(h**~i**h]h~i}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh) with release ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_release() there.}(hj_0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubj9)}(h **Return**h]jz)}(hjp0h]hReturn}(hjr0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn0ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubj9)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_fetch_andnot_relaxed (C function)c.atomic64_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 atomic64_fetch_andnot_relaxed (s64 i, atomic64_t *v)h]h)}(h7s64 atomic64_fetch_andnot_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj0modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_andnot_relaxedsbc.atomic64_fetch_andnot_relaxedasbuh1hhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0hhhj0hM ubh)}(hatomic64_fetch_andnot_relaxedh]h)}(hj0h]hatomic64_fetch_andnot_relaxed}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj0hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj1modnameN classnameNjcjf)}ji]j0c.atomic64_fetch_andnot_relaxedasbuh1hhj1ubj=)}(h h]h }(hj:1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1ubh)}(hjh]hi}(hjH1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj1ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjc1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetje1modnameN classnameNjcjf)}ji]j0c.atomic64_fetch_andnot_relaxedasbuh1hhj\1ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\1ubh)}(hjh]hv}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj1ubeh}(h]h ]h"]h$]h&]jj uh1jhj0hhhj0hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhj0hM ubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1hhj0hM hj0hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_andnot_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj2h]hs64 i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj2ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hj1ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj?2h]h atomic64_t *v}(hjA2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj92ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjX2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjT2hM hjU2ubah}(h]h ]h"]h$]h&]uh1jhj92ubeh}(h]h ]h"]h$]h&]uh1jhjT2hM hj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjz2h]h Description}(hj|2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh to (}(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh & }(hj2hhhNhNubjz)}(h**~i**h]h~i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh) with relaxed ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_relaxed() there.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj9)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_or (C function) c.atomic64_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'void atomic64_or (s64 i, atomic64_t *v)h]h)}(h&void atomic64_or(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj=3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj93hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjL3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj93hhhjK3hM ubh)}(h atomic64_orh]h)}(h atomic64_orh]h atomic64_or}(hj^3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj93hhhjK3hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj}3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]jl)}j_j`3sb c.atomic64_orasbuh1hhjv3ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjv3ubh)}(hjh]hi}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjr3ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]j3 c.atomic64_orasbuh1hhj3ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjr3ubeh}(h]h ]h"]h$]h&]jj uh1jhj93hhhjK3hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj53hhhjK3hM ubah}(h]j03ah ](jjeh"]h$]h&]jj)jhuh1hhjK3hM hj23hhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj(4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj%4hhubah}(h]h ]h"]h$]h&]uh1jhj23hhhjK3hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@4j4j@4j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_or() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjJ4h]h Parameters}(hjL4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hji4h]hs64 i}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjg4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjc4ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjc4ubeh}(h]h ]h"]h$]h&]uh1jhj~4hM hj`4ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj4h]h atomic64_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj4ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM hj`4ubeh}(h]h ]h"]h$]h&]uh1jhjD4ubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh to (}(hj4hhhNhNubjz)}(h**v**h]hv}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh | }(hj4hhhNhNubjz)}(h**i**h]hi}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh) with relaxed ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubj9)}(h;Unsafe to use in noinstr code; use raw_atomic64_or() there.h]h;Unsafe to use in noinstr code; use raw_atomic64_or() there.}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubj9)}(h **Return**h]jz)}(hjI5h]hReturn}(hjK5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjG5ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubj9)}(hNothing.h]hNothing.}(hj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjD4ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_fetch_or (C function)c.atomic64_fetch_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,s64 atomic64_fetch_or (s64 i, atomic64_t *v)h]h)}(h+s64 atomic64_fetch_or(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_orsbc.atomic64_fetch_orasbuh1hhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhj5hM ubh)}(hatomic64_fetch_orh]h)}(hj5h]hatomic64_fetch_or}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj5hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]j5c.atomic64_fetch_orasbuh1hhj5ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubh)}(hjh]hi}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj*6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,6modnameN classnameNjcjf)}ji]j5c.atomic64_fetch_orasbuh1hhj#6ubj=)}(h h]h }(hjH6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#6ubj)}(hjh]h*}(hjV6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#6ubh)}(hjh]hv}(hjc6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhj5hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj5hM ubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhj5hM hj5hhubj )}(hhh]j9)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj6h]hs64 i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM hj6ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj7h]h atomic64_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubj9)}(h**Description**h]jz)}(hjA7h]h Description}(hjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjW7hhhNhNubjz)}(h**v**h]hv}(hj_7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW7ubh to (}(hjW7hhhNhNubjz)}(h**v**h]hv}(hjq7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW7ubh | }(hjW7hhhNhNubjz)}(h**i**h]hi}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW7ubh) with full ordering.}(hjW7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj9)}(hAUnsafe to use in noinstr code; use raw_atomic64_fetch_or() there.h]hAUnsafe to use in noinstr code; use raw_atomic64_fetch_or() there.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj9)}(h **Return**h]jz)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubj9)}(hThe original value of **v**.h](hThe original value of }(hj7hhhNhNubjz)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_acquire (C function)c.atomic64_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4s64 atomic64_fetch_or_acquire (s64 i, atomic64_t *v)h]h)}(h3s64 atomic64_fetch_or_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj 8modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_or_acquiresbc.atomic64_fetch_or_acquireasbuh1hhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj)8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8hhhj(8hM ubh)}(hatomic64_fetch_or_acquireh]h)}(hj%8h]hatomic64_fetch_or_acquire}(hj;8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj78ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhj(8hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjY8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[8modnameN classnameNjcjf)}ji]j#8c.atomic64_fetch_or_acquireasbuh1hhjR8ubj=)}(h h]h }(hjw8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR8ubh)}(hjh]hi}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN8ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8modnameN classnameNjcjf)}ji]j#8c.atomic64_fetch_or_acquireasbuh1hhj8ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hjh]hv}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN8ubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhj(8hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj(8hM ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhj(8hM hj7hhubj )}(hhh]j9)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj(8hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj$9h]h Parameters}(hj&9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"9ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjC9h]hs64 i}(hjE9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=9ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj\9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX9hM hjY9ubah}(h]h ]h"]h$]h&]uh1jhj=9ubeh}(h]h ]h"]h$]h&]uh1jhjX9hM hj:9ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj|9h]h atomic64_t *v}(hj~9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjz9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjv9ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhjv9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hj:9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh to (}(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh | }(hj9hhhNhNubjz)}(h**i**h]hi}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh) with acquire ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_acquire() there.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj9)}(h **Return**h]jz)}(hj#:h]hReturn}(hj%:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!:ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj9)}(hThe original value of **v**.h](hThe original value of }(hj9:hhhNhNubjz)}(h**v**h]hv}(hjA:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9:ubh.}(hj9:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_release (C function)c.atomic64_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4s64 atomic64_fetch_or_release (s64 i, atomic64_t *v)h]h)}(h3s64 atomic64_fetch_or_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj}:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_or_releasesbc.atomic64_fetch_or_releaseasbuh1hhjv:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjv:hhhj:hM ubh)}(hatomic64_fetch_or_releaseh]h)}(hj:h]hatomic64_fetch_or_release}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjv:hhhj:hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]j:c.atomic64_fetch_or_releaseasbuh1hhj:ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubh)}(hjh]hi}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj;modnameN classnameNjcjf)}ji]j:c.atomic64_fetch_or_releaseasbuh1hhj;ubj=)}(h h]h }(hj4;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubj)}(hjh]h*}(hjB;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hjh]hv}(hjO;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjv:hhhj:hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjr:hhhj:hM ubah}(h]jm:ah ](jjeh"]h$]h&]jj)jhuh1hhj:hM hjo:hhubj )}(hhh]j9)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjx;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hju;hhubah}(h]h ]h"]h$]h&]uh1jhjo:hhhj:hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj;h]hs64 i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hj;ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj;h]h atomic64_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hj-<h]h Description}(hj/<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+<ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjC<hhhNhNubjz)}(h**v**h]hv}(hjK<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC<ubh to (}(hjC<hhhNhNubjz)}(h**v**h]hv}(hj]<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC<ubh | }(hjC<hhhNhNubjz)}(h**i**h]hi}(hjo<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC<ubh) with release ordering.}(hjC<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj9)}(hThe original value of **v**.h](hThe original value of }(hj<hhhNhNubjz)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_or_relaxed (C function)c.atomic64_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4s64 atomic64_fetch_or_relaxed (s64 i, atomic64_t *v)h]h)}(h3s64 atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_or_relaxedsbc.atomic64_fetch_or_relaxedasbuh1hhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<hhhj=hM ubh)}(hatomic64_fetch_or_relaxedh]h)}(hj=h]hatomic64_fetch_or_relaxed}(hj'=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhj=hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjE=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB=ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjG=modnameN classnameNjcjf)}ji]j=c.atomic64_fetch_or_relaxedasbuh1hhj>=ubj=)}(h h]h }(hjc=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>=ubh)}(hjh]hi}(hjq=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:=ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj=modnameN classnameNjcjf)}ji]j=c.atomic64_fetch_or_relaxedasbuh1hhj=ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hjh]hv}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:=ubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhj=hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj=hM ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1hhj=hM hj<hhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj=hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j>j4j>j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj/>h]hs64 i}(hj1>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj->ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj)>ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjD>hM hjE>ubah}(h]h ]h"]h$]h&]uh1jhj)>ubeh}(h]h ]h"]h$]h&]uh1jhjD>hM hj&>ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh>h]h atomic64_t *v}(hjj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjf>ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjb>ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}>hM hj~>ubah}(h]h ]h"]h$]h&]uh1jhjb>ubeh}(h]h ]h"]h$]h&]uh1jhj}>hM hj&>ubeh}(h]h ]h"]h$]h&]uh1jhj >ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj>hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh to (}(hj>hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh | }(hj>hhhNhNubjz)}(h**i**h]hi}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh) with relaxed ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubj9)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubj9)}(h **Return**h]jz)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ?ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubj9)}(hThe original value of **v**.h](hThe original value of }(hj%?hhhNhNubjz)}(h**v**h]hv}(hj-?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%?ubh.}(hj%?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj >ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_xor (C function)c.atomic64_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void atomic64_xor (s64 i, atomic64_t *v)h]h)}(h'void atomic64_xor(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjf?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hju?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjb?hhhjt?hM ubh)}(h atomic64_xorh]h)}(h atomic64_xorh]h atomic64_xor}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjb?hhhjt?hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj?modnameN classnameNjcjf)}ji]jl)}j_j?sbc.atomic64_xorasbuh1hhj?ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(hjh]hi}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj?modnameN classnameNjcjf)}ji]j?c.atomic64_xorasbuh1hhj?ubj=)}(h h]h }(hj @hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hjh]hv}(hj(@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?ubeh}(h]h ]h"]h$]h&]jj uh1jhjb?hhhjt?hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^?hhhjt?hM ubah}(h]jY?ah ](jjeh"]h$]h&]jj)jhuh1hhjt?hM hj[?hhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjQ@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjN@hhubah}(h]h ]h"]h$]h&]uh1jhj[?hhhjt?hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3ji@j4ji@j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_xor() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjs@h]h Parameters}(hju@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjm@ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj@h]hs64 i}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj@ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hj@ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj@h]h atomic64_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hj@ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hM! hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM! hj@ubeh}(h]h ]h"]h$]h&]uh1jhjm@ubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjm@ubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjAhhhNhNubjz)}(h**v**h]hv}(hj$AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh to (}(hjAhhhNhNubjz)}(h**v**h]hv}(hj6AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh ^ }(hjAhhhNhNubjz)}(h**i**h]hi}(hjHAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh) with relaxed ordering.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjm@ubj9)}(hhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjBubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ChM2 hj Cubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj ChM2 hjBubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj/Ch]h atomic64_t *v}(hj1ChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-Cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hj)Cubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjHChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDChM3 hjECubah}(h]h ]h"]h$]h&]uh1jhj)Cubeh}(h]h ]h"]h$]h&]uh1jhjDChM3 hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h**Description**h]jz)}(hjjCh]h Description}(hjlChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhCubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5 hjBubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjChhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh to (}(hjChhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh ^ }(hjChhhNhNubjz)}(h**i**h]hi}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh) with full ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hjBubj9)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_xor() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_xor() there.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6 hjBubj9)}(h **Return**h]jz)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8 hjBubj9)}(hThe original value of **v**.h](hThe original value of }(hjChhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9 hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_xor_acquire (C function)c.atomic64_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_xor_acquire (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_xor_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj0DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Dubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2DmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_xor_acquiresbc.atomic64_fetch_xor_acquireasbuh1hhj)Dhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD ubj=)}(h h]h }(hjRDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)DhhhjQDhMD ubh)}(hatomic64_fetch_xor_acquireh]h)}(hjNDh]hatomic64_fetch_xor_acquire}(hjdDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`Dubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)DhhhjQDhMD ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDmodnameN classnameNjcjf)}ji]jLDc.atomic64_fetch_xor_acquireasbuh1hhj{Dubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{Dubh)}(hjh]hi}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwDubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDmodnameN classnameNjcjf)}ji]jLDc.atomic64_fetch_xor_acquireasbuh1hhjDubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hjh]hv}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwDubeh}(h]h ]h"]h$]h&]jj uh1jhj)DhhhjQDhMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%DhhhjQDhMD ubah}(h]j Dah ](jjeh"]h$]h&]jj)jhuh1hhjQDhMD hj"Dhhubj )}(hhh]j9)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj+EhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hj(Ehhubah}(h]h ]h"]h$]h&]uh1jhj"DhhhjQDhMD ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCEj4jCEj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_xor_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjMEh]h Parameters}(hjOEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKEubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjGEubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjlEh]hs64 i}(hjnEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjfEubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhME hjEubah}(h]h ]h"]h$]h&]uh1jhjfEubeh}(h]h ]h"]h$]h&]uh1jhjEhME hjcEubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjEh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjEubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMF hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMF hjcEubeh}(h]h ]h"]h$]h&]uh1jhjGEubj9)}(h**Description**h]jz)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjGEubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjEhhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh to (}(hjEhhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh ^ }(hjEhhhNhNubjz)}(h**i**h]hi}(hj"FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh) with acquire ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjGEubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_acquire() there.}(hj;FhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hjGEubj9)}(h **Return**h]jz)}(hjLFh]hReturn}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMK hjGEubj9)}(hThe original value of **v**.h](hThe original value of }(hjbFhhhNhNubjz)}(h**v**h]hv}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbFubh.}(hjbFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hjGEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_xor_release (C function)c.atomic64_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_xor_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_xor_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_xor_releasesbc.atomic64_fetch_xor_releaseasbuh1hhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV ubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFhhhjFhMV ubh)}(hatomic64_fetch_xor_releaseh]h)}(hjFh]hatomic64_fetch_xor_release}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjFhMV ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jFc.atomic64_fetch_xor_releaseasbuh1hhjFubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubh)}(hjh]hi}(hj$GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjFubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj?GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hjGubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMW hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMW hjGubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjHh]h atomic64_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjHubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj4HhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0HhMX hj1Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj0HhMX hjGubeh}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjVHh]h Description}(hjXHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjGubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjlHhhhNhNubjz)}(h**v**h]hv}(hjtHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlHubh to (}(hjlHhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlHubh ^ }(hjlHhhhNhNubjz)}(h**i**h]hi}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlHubh) with release ordering.}(hjlHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjGubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_release() there.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ hjGubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjGubj9)}(hThe original value of **v**.h](hThe original value of }(hjHhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^ hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'atomic64_fetch_xor_relaxed (C function)c.atomic64_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_xor_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_xor_relaxedsbc.atomic64_fetch_xor_relaxedasbuh1hhjIhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi ubj=)}(h h]h }(hj>IhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhj=IhMi ubh)}(hatomic64_fetch_xor_relaxedh]h)}(hj:Ih]hatomic64_fetch_xor_relaxed}(hjPIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhj=IhMi ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjnIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpImodnameN classnameNjcjf)}ji]j8Ic.atomic64_fetch_xor_relaxedasbuh1hhjgIubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgIubh)}(hjh]hi}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcIubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]j8Ic.atomic64_fetch_xor_relaxedasbuh1hhjIubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hjh]hv}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcIubeh}(h]h ]h"]h$]h&]jj uh1jhjIhhhj=IhMi ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj=IhMi ubah}(h]j Iah ](jjeh"]h$]h&]jj)jhuh1hhj=IhMi hjIhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hjJhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj=IhMi ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/Jj4j/Jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj9Jh]h Parameters}(hj;JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7Jubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hj3Jubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjXJh]hs64 i}(hjZJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjRJubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjqJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmJhMj hjnJubah}(h]h ]h"]h$]h&]uh1jhjRJubeh}(h]h ]h"]h$]h&]uh1jhjmJhMj hjOJubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjJh]h atomic64_t *v}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjJubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMk hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMk hjOJubeh}(h]h ]h"]h$]h&]uh1jhj3Jubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMm hj3Jubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh to (}(hjJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh ^ }(hjJhhhNhNubjz)}(h**i**h]hi}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh) with relaxed ordering.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hj3Jubj9)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_xor_relaxed() there.}(hj'KhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hj3Jubj9)}(h **Return**h]jz)}(hj8Kh]hReturn}(hj:KhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6Kubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMp hj3Jubj9)}(hThe original value of **v**.h](hThe original value of }(hjNKhhhNhNubjz)}(h**v**h]hv}(hjVKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNKubh.}(hjNKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hj3Jubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_xchg (C function)c.atomic64_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*s64 atomic64_xchg (atomic64_t *v, s64 new)h]h)}(h)s64 atomic64_xchg(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jl)}j_ atomic64_xchgsbc.atomic64_xchgasbuh1hhjKhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ ubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKhhhjKhM{ ubh)}(h atomic64_xchgh]h)}(hjKh]h atomic64_xchg}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhjKhM{ ubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jKc.atomic64_xchgasbuh1hhjKubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hjh]hv}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjKubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj8LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Lubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:LmodnameN classnameNjcjf)}ji]jKc.atomic64_xchgasbuh1hhj1Lubj=)}(h h]h }(hjVLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1Lubh)}(hnewh]hnew}(hjdLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1Lubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjKubeh}(h]h ]h"]h$]h&]jj uh1jhjKhhhjKhM{ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjKhM{ ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1hhjKhM{ hjKhhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhM{ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jLj4jLj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with full ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjLubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjLh]h atomic64_t *v}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjLubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhM| hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM| hjLubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjMh]hs64 new}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjMubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhM} hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM} hjLubeh}(h]h ]h"]h$]h&]uh1jhjLubj9)}(h**Description**h]jz)}(hjCMh]h Description}(hjEMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAMubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjLubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjYMhhhNhNubjz)}(h**v**h]hv}(hjaMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYMubh to }(hjYMhhhNhNubjz)}(h**new**h]hnew}(hjsMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYMubh with full ordering.}(hjYMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjLubj9)}(h=Unsafe to use in noinstr code; use raw_atomic64_xchg() there.h]h=Unsafe to use in noinstr code; use raw_atomic64_xchg() there.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjLubj9)}(h **Return**h]jz)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjLubj9)}(hThe original value of **v**.h](hThe original value of }(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_acquire (C function)c.atomic64_xchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_acquire (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_acquire(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jl)}j_atomic64_xchg_acquiresbc.atomic64_xchg_acquireasbuh1hhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMhhhjNhM ubh)}(hatomic64_xchg_acquireh]h)}(hjNh]hatomic64_xchg_acquire}(hj+NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'Nubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhjNhM ubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjINhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKNmodnameN classnameNjcjf)}ji]jNc.atomic64_xchg_acquireasbuh1hhjBNubj=)}(h h]h }(hjgNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBNubj)}(hjh]h*}(hjuNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBNubh)}(hjh]hv}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBNubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>Nubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNmodnameN classnameNjcjf)}ji]jNc.atomic64_xchg_acquireasbuh1hhjNubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNubh)}(hnewh]hnew}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>Nubeh}(h]h ]h"]h$]h&]jj uh1jhjMhhhjNhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjNhM ubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhjNhM hjMhhubj )}(hhh]j9)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjNhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjNhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Oj4j Oj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj4Oh]h atomic64_t *v}(hj6OhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2Oubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.Oubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjMOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIOhM hjJOubah}(h]h ]h"]h$]h&]uh1jhj.Oubeh}(h]h ]h"]h$]h&]uh1jhjIOhM hj+Oubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjmOh]hs64 new}(hjoOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkOubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjgOubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhM hjOubah}(h]h ]h"]h$]h&]uh1jhjgOubeh}(h]h ]h"]h$]h&]uh1jhjOhM hj+Oubeh}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh to }(hjOhhhNhNubjz)}(h**new**h]hnew}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh with acquire ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_xchg_acquire() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_xchg_acquire() there.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj9)}(h **Return**h]jz)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubj9)}(hThe original value of **v**.h](hThe original value of }(hjPhhhNhNubjz)}(h**v**h]hv}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_release (C function)c.atomic64_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_release (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_release(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hj\PhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^PmodnameN classnameNjcjf)}ji]jl)}j_atomic64_xchg_releasesbc.atomic64_xchg_releaseasbuh1hhjUPhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj~PhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUPhhhj}PhM ubh)}(hatomic64_xchg_releaseh]h)}(hjzPh]hatomic64_xchg_release}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUPhhhj}PhM ubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPmodnameN classnameNjcjf)}ji]jxPc.atomic64_xchg_releaseasbuh1hhjPubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hjh]hv}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jxPc.atomic64_xchg_releaseasbuh1hhjPubj=)}(h h]h }(hj QhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubh)}(hnewh]hnew}(hj.QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubeh}(h]h ]h"]h$]h&]jj uh1jhjUPhhhj}PhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQPhhhj}PhM ubah}(h]jLPah ](jjeh"]h$]h&]jj)jhuh1hhj}PhM hjNPhhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjXQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjUQhhubah}(h]h ]h"]h$]h&]uh1jhjNPhhhj}PhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpQj4jpQj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjzQh]h Parameters}(hj|QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxQubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjQh]h atomic64_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjQubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjQh]hs64 new}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjQubeh}(h]h ]h"]h$]h&]uh1jhjtQubj9)}(h**Description**h]jz)}(hj Rh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Rubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hj#RhhhNhNubjz)}(h**v**h]hv}(hj+RhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#Rubh to }(hj#RhhhNhNubjz)}(h**new**h]hnew}(hj=RhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#Rubh with release ordering.}(hj#RhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_xchg_release() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_xchg_release() there.}(hjVRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubj9)}(h **Return**h]jz)}(hjgRh]hReturn}(hjiRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeRubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubj9)}(hThe original value of **v**.h](hThe original value of }(hj}RhhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}Rubh.}(hj}RhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtQubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_xchg_relaxed (C function)c.atomic64_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 atomic64_xchg_relaxed (atomic64_t *v, s64 new)h]h)}(h1s64 atomic64_xchg_relaxed(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjRmodnameN classnameNjcjf)}ji]jl)}j_atomic64_xchg_relaxedsbc.atomic64_xchg_relaxedasbuh1hhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjRhM ubh)}(hatomic64_xchg_relaxedh]h)}(hjRh]hatomic64_xchg_relaxed}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjRhM ubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jRc.atomic64_xchg_relaxedasbuh1hhj Subj=)}(h h]h }(hj1ShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj Subj)}(hjh]h*}(hj?ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Subh)}(hjh]hv}(hjLShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Subeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjgShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjiSmodnameN classnameNjcjf)}ji]jRc.atomic64_xchg_relaxedasbuh1hhj`Subj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`Subh)}(hnewh]hnew}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`Subeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjRhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjRhM ubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1hhjRhM hjRhhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjRhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_xchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjSh]h atomic64_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThM hjSubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj7Th]hs64 new}(hj9ThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5Tubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1Tubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjPThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLThM hjMTubah}(h]h ]h"]h$]h&]uh1jhj1Tubeh}(h]h ]h"]h$]h&]uh1jhjLThM hjSubeh}(h]h ]h"]h$]h&]uh1jhjSubj9)}(h**Description**h]jz)}(hjrTh]h Description}(hjtThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjThhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh to }(hjThhhNhNubjz)}(h**new**h]hnew}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh with relaxed ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_xchg_relaxed() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_xchg_relaxed() there.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj9)}(h **Return**h]jz)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj9)}(hThe original value of **v**.h](hThe original value of }(hjThhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic64_cmpxchg (C function)c.atomic64_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 atomic64_cmpxchg (atomic64_t *v, s64 old, s64 new)h]h)}(h5s64 atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hj&UhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Uubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(UmodnameN classnameNjcjf)}ji]jl)}j_atomic64_cmpxchgsbc.atomic64_cmpxchgasbuh1hhjUhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjHUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUhhhjGUhM ubh)}(hatomic64_cmpxchgh]h)}(hjDUh]hatomic64_cmpxchg}(hjZUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjGUhM ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjxUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzUmodnameN classnameNjcjf)}ji]jBUc.atomic64_cmpxchgasbuh1hhjqUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqUubh)}(hjh]hv}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmUubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jBUc.atomic64_cmpxchgasbuh1hhjUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(holdh]hold}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmUubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]jBUc.atomic64_cmpxchgasbuh1hhj Vubj=)}(h h]h }(hj2VhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj Vubh)}(hnewh]hnew}(hj@VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Vubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmUubeh}(h]h ]h"]h$]h&]jj uh1jhjUhhhjGUhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjGUhM ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1hhjGUhM hjUhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjgVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjGUhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_cmpxchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjVh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjVubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjVh]hs64 old}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjVubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjWh]hs64 new}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjWubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj6WhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2WhM hj3Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhj2WhM hjVubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjXWh]h Description}(hjZWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVWubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjnWhhhNhNubjz)}(h**v**h]hv}(hjvWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnWubh == }(hjnWhhhNhNubjz)}(h**old**h]hold}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnWubh), atomically updates }(hjnWhhhNhNubjz)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnWubh to }(hjnWhhhNhNubjz)}(h**new**h]hnew}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnWubh with full ordering. Otherwise, }(hjnWhhhNhNubjz)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnWubh2 is not modified and relaxed ordering is provided.}(hjnWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj9)}(h@Unsafe to use in noinstr code; use raw_atomic64_cmpxchg() there.h]h@Unsafe to use in noinstr code; use raw_atomic64_cmpxchg() there.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubj9)}(hThe original value of **v**.h](hThe original value of }(hjWhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_acquire (C function)c.atomic64_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>s64 atomic64_cmpxchg_acquire (atomic64_t *v, s64 old, s64 new)h]h)}(h=s64 atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjBXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?Xubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDXmodnameN classnameNjcjf)}ji]jl)}j_atomic64_cmpxchg_acquiresbc.atomic64_cmpxchg_acquireasbuh1hhj;Xhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjdXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;XhhhjcXhM ubh)}(hatomic64_cmpxchg_acquireh]h)}(hj`Xh]hatomic64_cmpxchg_acquire}(hjvXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;XhhhjcXhM ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjXmodnameN classnameNjcjf)}ji]j^Xc.atomic64_cmpxchg_acquireasbuh1hhjXubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hjh]hv}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjXmodnameN classnameNjcjf)}ji]j^Xc.atomic64_cmpxchg_acquireasbuh1hhjXubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjXubh)}(holdh]hold}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj0YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Yubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2YmodnameN classnameNjcjf)}ji]j^Xc.atomic64_cmpxchg_acquireasbuh1hhj)Yubj=)}(h h]h }(hjNYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)Yubh)}(hnewh]hnew}(hj\YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)Yubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubeh}(h]h ]h"]h$]h&]jj uh1jhj;XhhhjcXhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7XhhhjcXhM ubah}(h]j2Xah ](jjeh"]h$]h&]jj)jhuh1hhjcXhM hj4Xhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYhhubah}(h]h ]h"]h$]h&]uh1jhj4XhhhjcXhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jYj4jYj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjYh]h atomic64_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhM hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjYubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjZh]hs64 old}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhM hjZubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjZhM hjYubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj9Zh]hs64 new}(hj;ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7Zubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3Zubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjRZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNZhM hjOZubah}(h]h ]h"]h$]h&]uh1jhj3Zubeh}(h]h ]h"]h$]h&]uh1jhjNZhM hjYubeh}(h]h ]h"]h$]h&]uh1jhjYubj9)}(h**Description**h]jz)}(hjtZh]h Description}(hjvZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrZubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh == }(hjZhhhNhNubjz)}(h**old**h]hold}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh), atomically updates }(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh to }(hjZhhhNhNubjz)}(h**new**h]hnew}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh# with acquire ordering. Otherwise, }(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh2 is not modified and relaxed ordering is provided.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj9)}(hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_acquire() there.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj9)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubjz)}(h**v**h]hv}(hj"[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_release (C function)c.atomic64_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>s64 atomic64_cmpxchg_release (atomic64_t *v, s64 old, s64 new)h]h)}(h=s64 atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hj^[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj`[modnameN classnameNjcjf)}ji]jl)}j_atomic64_cmpxchg_releasesbc.atomic64_cmpxchg_releaseasbuh1hhjW[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjW[hhhj[hM ubh)}(hatomic64_cmpxchg_releaseh]h)}(hj|[h]hatomic64_cmpxchg_release}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjW[hhhj[hM ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[modnameN classnameNjcjf)}ji]jz[c.atomic64_cmpxchg_releaseasbuh1hhj[ubj=)}(h h]h }(hj[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hjh]hv}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jz[c.atomic64_cmpxchg_releaseasbuh1hhj[ubj=)}(h h]h }(hj"\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubh)}(holdh]hold}(hj0\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjL\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjI\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjN\modnameN classnameNjcjf)}ji]jz[c.atomic64_cmpxchg_releaseasbuh1hhjE\ubj=)}(h h]h }(hjj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjE\ubh)}(hnewh]hnew}(hjx\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubeh}(h]h ]h"]h$]h&]jj uh1jhjW[hhhj[hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjS[hhhj[hM ubah}(h]jN[ah ](jjeh"]h$]h&]jj)jhuh1hhj[hM hjP[hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\hhubah}(h]h ]h"]h$]h&]uh1jhjP[hhhj[hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j\j4j\j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj\h]h atomic64_t *v}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM hj\ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hj]h]hs64 old}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj]ubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hj5]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1]hM hj2]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj1]hM hj\ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjU]h]hs64 new}(hjW]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjS]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjO]ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjn]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjj]hM hjk]ubah}(h]h ]h"]h$]h&]uh1jhjO]ubeh}(h]h ]h"]h$]h&]uh1jhjj]hM hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh == }(hj]hhhNhNubjz)}(h**old**h]hold}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh), atomically updates }(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh to }(hj]hhhNhNubjz)}(h**new**h]hnew}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh# with release ordering. Otherwise, }(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh2 is not modified and relaxed ordering is provided.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(h **Return**h]jz)}(hj ^h]hReturn}(hj"^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj9)}(hThe original value of **v**.h](hThe original value of }(hj6^hhhNhNubjz)}(h**v**h]hv}(hj>^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6^ubh.}(hj6^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_cmpxchg_relaxed (C function)c.atomic64_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>s64 atomic64_cmpxchg_relaxed (atomic64_t *v, s64 old, s64 new)h]h)}(h=s64 atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjz^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|^modnameN classnameNjcjf)}ji]jl)}j_atomic64_cmpxchg_relaxedsbc.atomic64_cmpxchg_relaxedasbuh1hhjs^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjs^hhhj^hM ubh)}(hatomic64_cmpxchg_relaxedh]h)}(hj^h]hatomic64_cmpxchg_relaxed}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjs^hhhj^hM ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]j^c.atomic64_cmpxchg_relaxedasbuh1hhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hjh]hv}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hj _hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"_modnameN classnameNjcjf)}ji]j^c.atomic64_cmpxchg_relaxedasbuh1hhj_ubj=)}(h h]h }(hj>_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubh)}(holdh]hold}(hjL_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjh_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjj_modnameN classnameNjcjf)}ji]j^c.atomic64_cmpxchg_relaxedasbuh1hhja_ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hja_ubh)}(hnewh]hnew}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhjs^hhhj^hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjo^hhhj^hM ubah}(h]jj^ah ](jjeh"]h$]h&]jj)jhuh1hhj^hM hjl^hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1jhjl^hhhj^hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj_h]h atomic64_t *v}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hM hj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj`hM hj_ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hj8`h]hs64 old}(hj:`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6`ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj2`ubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjQ`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjM`hM hjN`ubah}(h]h ]h"]h$]h&]uh1jhj2`ubeh}(h]h ]h"]h$]h&]uh1jhjM`hM hj_ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjq`h]hs64 new}(hjs`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo`ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjk`ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hM hj`ubah}(h]h ]h"]h$]h&]uh1jhjk`ubeh}(h]h ]h"]h$]h&]uh1jhj`hM hj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh == }(hj`hhhNhNubjz)}(h**old**h]hold}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh), atomically updates }(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh to }(hj`hhhNhNubjz)}(h**new**h]hnew}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh# with relaxed ordering. Otherwise, }(hj`hhhNhNubjz)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh2 is not modified and relaxed ordering is provided.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there.}(hj+ahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(h **Return**h]jz)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:aubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hThe original value of **v**.h](hThe original value of }(hjRahhhNhNubjz)}(h**v**h]hv}(hjZahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRaubh.}(hjRahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!atomic64_try_cmpxchg (C function)c.atomic64_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj-chhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)chM hj*cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj)chM hj cubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjMch]hs64 *old}(hjOchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjGcubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjfchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbchM hjccubah}(h]h ]h"]h$]h&]uh1jhjGcubeh}(h]h ]h"]h$]h&]uh1jhjbchM hj cubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjch]hs64 new}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjcubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hj cubeh}(h]h ]h"]h$]h&]uh1jhjbubj9)}(h**Description**h]jz)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjbubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjchhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh == }(hjchhhNhNubjz)}(h**old**h]hold}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh), atomically updates }(hjchhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh to }(hjchhhNhNubjz)}(h**new**h]hnew}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh with full ordering. Otherwise, }(hjchhhNhNubjz)}(h**v**h]hv}(hj'dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh is not modified, }(hjchhhNhNubjz)}(h**old**h]hold}(hj9dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh$ is updated to the current value of }(hjchhhNhNubjz)}(h**v**h]hv}(hjKdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh#, and relaxed ordering is provided.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjbubj9)}(hDUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg() there.h]hDUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg() there.}(hjddhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjbubj9)}(h **Return**h]jz)}(hjudh]hReturn}(hjwdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsdubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hjbubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh if the exchange occurred, }(hjdhhhNhNubjz)}(h **false**h]hfalse}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh otherwise.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_acquire (C function)c.atomic64_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool atomic64_try_cmpxchg_acquire (atomic64_t *v, s64 *old, s64 new)h]h)}(hCbool atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM. ubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdhhhjdhM. ubh)}(hatomic64_try_cmpxchg_acquireh]h)}(hatomic64_try_cmpxchg_acquireh]hatomic64_try_cmpxchg_acquire}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdhhhjdhM. ubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jdsbc.atomic64_try_cmpxchg_acquireasbuh1hhjeubj=)}(h h]h }(hj9ehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubj)}(hjh]h*}(hjGehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hjh]hv}(hjTehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjoehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjleubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjqemodnameN classnameNjcjf)}ji]j5ec.atomic64_try_cmpxchg_acquireasbuh1hhjheubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjheubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjheubh)}(holdh]hold}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjheubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]j5ec.atomic64_try_cmpxchg_acquireasbuh1hhjeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hnewh]hnew}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhjdhhhjdhM. ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjdhhhjdhM. ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhjdhM. hjdhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM. hjfhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhM. ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2fj4j2fj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:fubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hj6fubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj[fh]h atomic64_t *v}(hj]fhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ hjUfubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjtfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpfhM/ hjqfubah}(h]h ]h"]h$]h&]uh1jhjUfubeh}(h]h ]h"]h$]h&]uh1jhjpfhM/ hjRfubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjfh]hs64 *old}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 hjfubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhM0 hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM0 hjRfubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjfh]hs64 new}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjfubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhM1 hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM1 hjRfubeh}(h]h ]h"]h$]h&]uh1jhj6fubj9)}(h**Description**h]jz)}(hjgh]h Description}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hj6fubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjghhhNhNubjz)}(h**v**h]hv}(hj&ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh == }(hjghhhNhNubjz)}(h**old**h]hold}(hj8ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh), atomically updates }(hjghhhNhNubjz)}(h**v**h]hv}(hjJghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh to }(hjghhhNhNubjz)}(h**new**h]hnew}(hj\ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh# with acquire ordering. Otherwise, }(hjghhhNhNubjz)}(h**v**h]hv}(hjnghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh is not modified, }(hjghhhNhNubjz)}(h**old**h]hold}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh$ is updated to the current value of }(hjghhhNhNubjz)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh#, and relaxed ordering is provided.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hj6fubj9)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_acquire() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_acquire() there.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6 hj6fubj9)}(h **Return**h]jz)}(hjgh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8 hj6fubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh if the exchange occurred, }(hjghhhNhNubjz)}(h **false**h]hfalse}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh otherwise.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9 hj6fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_release (C function)c.atomic64_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool atomic64_try_cmpxchg_release (atomic64_t *v, s64 *old, s64 new)h]h)}(hCbool atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hj!hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD ubj=)}(h h]h }(hj/hhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhhj.hhMD ubh)}(hatomic64_try_cmpxchg_releaseh]h)}(hatomic64_try_cmpxchg_releaseh]hatomic64_try_cmpxchg_release}(hjAhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=hubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhhj.hhMD ubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj`hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]hubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjbhmodnameN classnameNjcjf)}ji]jl)}j_jChsbc.atomic64_try_cmpxchg_releaseasbuh1hhjYhubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYhubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhubh)}(hjh]hv}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYhubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUhubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjhmodnameN classnameNjcjf)}ji]j|hc.atomic64_try_cmpxchg_releaseasbuh1hhjhubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(holdh]hold}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUhubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj imodnameN classnameNjcjf)}ji]j|hc.atomic64_try_cmpxchg_releaseasbuh1hhjiubj=)}(h h]h }(hj)ihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hnewh]hnew}(hj7ihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUhubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhhj.hhMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj.hhMD ubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1hhj.hhMD hjhhhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjaihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hj^ihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhj.hhMD ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyij4jyij5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hj}iubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjih]h atomic64_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjiubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihME hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihME hjiubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjih]hs64 *old}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjiubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMF hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMF hjiubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjjh]hs64 new}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj-jhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)jhMG hj*jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj)jhMG hjiubeh}(h]h ]h"]h$]h&]uh1jhj}iubj9)}(h**Description**h]jz)}(hjOjh]h Description}(hjQjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hj}iubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjejhhhNhNubjz)}(h**v**h]hv}(hjmjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh == }(hjejhhhNhNubjz)}(h**old**h]hold}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh), atomically updates }(hjejhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh to }(hjejhhhNhNubjz)}(h**new**h]hnew}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh# with release ordering. Otherwise, }(hjejhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh is not modified, }(hjejhhhNhNubjz)}(h**old**h]hold}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh$ is updated to the current value of }(hjejhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjejubh#, and relaxed ordering is provided.}(hjejhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hj}iubj9)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hj}iubj9)}(h **Return**h]jz)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMN hj}iubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh if the exchange occurred, }(hjkhhhNhNubjz)}(h **false**h]hfalse}(hj/khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh otherwise.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMO hj}iubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_try_cmpxchg_relaxed (C function)c.atomic64_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool atomic64_try_cmpxchg_relaxed (atomic64_t *v, s64 *old, s64 new)h]h)}(hCbool atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjhkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdkhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ ubj=)}(h h]h }(hjvkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdkhhhjukhM[ ubh)}(hatomic64_try_cmpxchg_relaxedh]h)}(hatomic64_try_cmpxchg_relaxedh]hatomic64_try_cmpxchg_relaxed}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdkhhhjukhM[ ubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jl)}j_jksbc.atomic64_try_cmpxchg_relaxedasbuh1hhjkubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hjh]hv}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jkc.atomic64_try_cmpxchg_relaxedasbuh1hhjkubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hj)lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(holdh]hold}(hj6lhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjRlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTlmodnameN classnameNjcjf)}ji]jkc.atomic64_try_cmpxchg_relaxedasbuh1hhjKlubj=)}(h h]h }(hjplhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKlubh)}(hnewh]hnew}(hj~lhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjkubeh}(h]h ]h"]h$]h&]jj uh1jhjdkhhhjukhM[ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`khhhjukhM[ ubah}(h]j[kah ](jjeh"]h$]h&]jj)jhuh1hhjukhM[ hj]khhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ hjlhhubah}(h]h ]h"]h$]h&]uh1jhj]khhhjukhM[ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_ hjlubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjlh]h atomic64_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hjlubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhM\ hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM\ hjlubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hj"mh]hs64 *old}(hj$mhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj mubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjmubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hj;mhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7mhM] hj8mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj7mhM] hjlubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj[mh]hs64 new}(hj]mhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^ hjUmubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjtmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpmhM^ hjqmubah}(h]h ]h"]h$]h&]uh1jhjUmubeh}(h]h ]h"]h$]h&]uh1jhjpmhM^ hjlubeh}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h**Description**h]jz)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM` hjlubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjmhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh == }(hjmhhhNhNubjz)}(h**old**h]hold}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh), atomically updates }(hjmhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh to }(hjmhhhNhNubjz)}(h**new**h]hnew}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh# with relaxed ordering. Otherwise, }(hjmhhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh is not modified, }(hjmhhhNhNubjz)}(h**old**h]hold}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh$ is updated to the current value of }(hjmhhhNhNubjz)}(h**v**h]hv}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh#, and relaxed ordering is provided.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_ hjlubj9)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_relaxed() there.}(hj9nhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMc hjlubj9)}(h **Return**h]jz)}(hjJnh]hReturn}(hjLnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHnubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMe hjlubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjdnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`nubh if the exchange occurred, }(hj`nhhhNhNubjz)}(h **false**h]hfalse}(hjvnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`nubh otherwise.}(hj`nhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMf hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_sub_and_test (C function)c.atomic64_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool atomic64_sub_and_test (s64 i, atomic64_t *v)h]h)}(h0bool atomic64_sub_and_test(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq ubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnhhhjnhMq ubh)}(hatomic64_sub_and_testh]h)}(hatomic64_sub_and_testh]hatomic64_sub_and_test}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjnhMq ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_jnsbc.atomic64_sub_and_testasbuh1hhjnubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubh)}(hjh]hi}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj7ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4oubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9omodnameN classnameNjcjf)}ji]j oc.atomic64_sub_and_testasbuh1hhj0oubj=)}(h h]h }(hjUohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0oubj)}(hjh]h*}(hjcohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0oubh)}(hjh]hv}(hjpohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0oubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjnhMq ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjnhMq ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1hhjnhMq hjnhhubj )}(hhh]j9)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hjohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMq ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3joj4joj5j6j7uh1hhhhj:hNhNubjp)}(hXI**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjoubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjoh]hs64 i}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMr hjoubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohMr hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMr hjoubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjph]h atomic64_t *v}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMs hj pubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(phMs hj)pubah}(h]h ]h"]h$]h&]uh1jhj pubeh}(h]h ]h"]h$]h&]uh1jhj(phMs hjoubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjNph]h Description}(hjPphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjoubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjdphhhNhNubjz)}(h**v**h]hv}(hjlphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdpubh to (}(hjdphhhNhNubjz)}(h**v**h]hv}(hj~phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdpubh - }(hjdphhhNhNubjz)}(h**i**h]hi}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdpubh) with full ordering.}(hjdphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMt hjoubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_sub_and_test() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_sub_and_test() there.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMv hjoubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMx hjoubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh if the resulting value of }(hjphhhNhNubjz)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh is zero, }(hjphhhNhNubjz)}(h **false**h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh otherwise.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_dec_and_test (C function)c.atomic64_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool atomic64_dec_and_test (atomic64_t *v)h]h)}(h)bool atomic64_dec_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hj1qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-qhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj?qhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-qhhhj>qhM ubh)}(hatomic64_dec_and_testh]h)}(hatomic64_dec_and_testh]hatomic64_dec_and_test}(hjQqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMqubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-qhhhj>qhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjpqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjrqmodnameN classnameNjcjf)}ji]jl)}j_jSqsbc.atomic64_dec_and_testasbuh1hhjiqubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiqubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiqubh)}(hjh]hv}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjequbah}(h]h ]h"]h$]h&]jj uh1jhj-qhhhj>qhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)qhhhj>qhM ubah}(h]j$qah ](jjeh"]h$]h&]jj)jhuh1hhj>qhM hj&qhhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqhhubah}(h]h ]h"]h$]h&]uh1jhj&qhhhj>qhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjrh]h atomic64_t *v}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjrubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*rhM hj+rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj*rhM hj rubah}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjPrh]h Description}(hjRrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjfrhhhNhNubjz)}(h**v**h]hv}(hjnrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfrubh to (}(hjfrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfrubh - 1) with full ordering.}(hjfrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_dec_and_test() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_dec_and_test() there.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj9)}(h **Return**h]jz)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh if the resulting value of }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh is zero, }(hjrhhhNhNubjz)}(h **false**h]hfalse}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh otherwise.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_inc_and_test (C function)c.atomic64_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool atomic64_inc_and_test (atomic64_t *v)h]h)}(h)bool atomic64_inc_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hj!shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj/shhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjshhhj.shM ubh)}(hatomic64_inc_and_testh]h)}(hatomic64_inc_and_testh]hatomic64_inc_and_test}(hjAshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=subah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhj.shM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj`shhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]subah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjbsmodnameN classnameNjcjf)}ji]jl)}j_jCssbc.atomic64_inc_and_testasbuh1hhjYsubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYsubh)}(hjh]hv}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUsubah}(h]h ]h"]h$]h&]jj uh1jhjshhhj.shM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhj.shM ubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1hhj.shM hjshhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjshhubah}(h]h ]h"]h$]h&]uh1jhjshhhj.shM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jsj4jsj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjth]h atomic64_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthM hjtubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjthM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hj@th]h Description}(hjBthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>tubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjVthhhNhNubjz)}(h**v**h]hv}(hj^thhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVtubh to (}(hjVthhhNhNubjz)}(h**v**h]hv}(hjpthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVtubh + 1) with full ordering.}(hjVthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_inc_and_test() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_inc_and_test() there.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh if the resulting value of }(hjthhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh is zero, }(hjthhhNhNubjz)}(h **false**h]hfalse}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh otherwise.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_add_negative (C function)c.atomic64_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool atomic64_add_negative (s64 i, atomic64_t *v)h]h)}(h0bool atomic64_add_negative(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj uhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj uhhhjuhM ubh)}(hatomic64_add_negativeh]h)}(hatomic64_add_negativeh]hatomic64_add_negative}(hj1uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-uubah}(h]h ](jjeh"]h$]h&]jj uh1hhj uhhhjuhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjPuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjRumodnameN classnameNjcjf)}ji]jl)}j_j3usbc.atomic64_add_negativeasbuh1hhjIuubj=)}(h h]h }(hjpuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIuubh)}(hjh]hi}(hj~uhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEuubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjumodnameN classnameNjcjf)}ji]jluc.atomic64_add_negativeasbuh1hhjuubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hjh]hv}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEuubeh}(h]h ]h"]h$]h&]jj uh1jhj uhhhjuhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj uhhhjuhM ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1hhjuhM hjuhhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jvj4jvj5j6j7uh1hhhhj:hNhNubjp)}(hXH**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_add_negative() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:vubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj6vubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjUvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQvhM hjRvubah}(h]h ]h"]h$]h&]uh1jhj6vubeh}(h]h ]h"]h$]h&]uh1jhjQvhM hj3vubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjuvh]h atomic64_t *v}(hjwvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsvubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjovubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhjovubeh}(h]h ]h"]h$]h&]uh1jhjvhM hj3vubeh}(h]h ]h"]h$]h&]uh1jhjvubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjvhhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh to (}(hjvhhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh + }(hjvhhhNhNubjz)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh) with full ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_add_negative() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_add_negative() there.}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj9)}(h **Return**h]jz)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj6whhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2wubh if the resulting value of }(hj2whhhNhNubjz)}(h**v**h]hv}(hjHwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2wubh is negative, }(hj2whhhNhNubjz)}(h **false**h]hfalse}(hjZwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2wubh otherwise.}(hj2whhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_acquire (C function)c.atomic64_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool atomic64_add_negative_acquire (s64 i, atomic64_t *v)h]h)}(h8bool atomic64_add_negative_acquire(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjwhM ubh)}(hatomic64_add_negative_acquireh]h)}(hatomic64_add_negative_acquireh]hatomic64_add_negative_acquire}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjwhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjwmodnameN classnameNjcjf)}ji]jl)}j_jwsbc.atomic64_add_negative_acquireasbuh1hhjwubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwubh)}(hjh]hi}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjxmodnameN classnameNjcjf)}ji]jwc.atomic64_add_negative_acquireasbuh1hhjxubj=)}(h h]h }(hj9xhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubj)}(hjh]h*}(hjGxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hjh]hv}(hjTxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjwhM ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjwhM hjwhhubj )}(hhh]j9)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj}xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzxhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hXS**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_add_negative_acquire() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjxh]hs64 i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM hjxubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjxh]h atomic64_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj yhM hj yubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj yhM hjxubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hj2yh]h Description}(hj4yhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0yubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjHyhhhNhNubjz)}(h**v**h]hv}(hjPyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh to (}(hjHyhhhNhNubjz)}(h**v**h]hv}(hjbyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh + }(hjHyhhhNhNubjz)}(h**i**h]hi}(hjtyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHyubh) with acquire ordering.}(hjHyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_acquire() there.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj9)}(h **Return**h]jz)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh if the resulting value of }(hjyhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh is negative, }(hjyhhhNhNubjz)}(h **false**h]hfalse}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh otherwise.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_release (C function)c.atomic64_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool atomic64_add_negative_release (s64 i, atomic64_t *v)h]h)}(h8bool atomic64_add_negative_release(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj#zhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzhhhj"zhM ubh)}(hatomic64_add_negative_releaseh]h)}(hatomic64_add_negative_releaseh]hatomic64_add_negative_release}(hj5zhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1zubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhj"zhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjTzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVzmodnameN classnameNjcjf)}ji]jl)}j_j7zsbc.atomic64_add_negative_releaseasbuh1hhjMzubj=)}(h h]h }(hjtzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMzubh)}(hjh]hi}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjIzubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzmodnameN classnameNjcjf)}ji]jpzc.atomic64_add_negative_releaseasbuh1hhjzubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hjh]hv}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjIzubeh}(h]h ]h"]h$]h&]jj uh1jhjzhhhj"zhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj zhhhj"zhM ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhj"zhM hj zhhubj )}(hhh]j9)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzhhubah}(h]h ]h"]h$]h&]uh1jhj zhhhj"zhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj:hNhNubjp)}(hXS**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_add_negative_release() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj!{h]h Parameters}(hj#{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj@{h]hs64 i}(hjB{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj:{ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjY{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjU{hM hjV{ubah}(h]h ]h"]h$]h&]uh1jhj:{ubeh}(h]h ]h"]h$]h&]uh1jhjU{hM hj7{ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjy{h]h atomic64_t *v}(hj{{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjw{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjs{ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hM hj{ubah}(h]h ]h"]h$]h&]uh1jhjs{ubeh}(h]h ]h"]h$]h&]uh1jhj{hM hj7{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh to (}(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh + }(hj{hhhNhNubjz)}(h**i**h]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh) with release ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_release() there.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(h **Return**h]jz)}(hj |h]hReturn}(hj"|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj:|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6|ubh if the resulting value of }(hj6|hhhNhNubjz)}(h**v**h]hv}(hjL|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6|ubh is negative, }(hj6|hhhNhNubjz)}(h **false**h]hfalse}(hj^|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6|ubh otherwise.}(hj6|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic64_add_negative_relaxed (C function)c.atomic64_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool atomic64_add_negative_relaxed (s64 i, atomic64_t *v)h]h)}(h8bool atomic64_add_negative_relaxed(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|hhhj|hM ubh)}(hatomic64_add_negative_relaxedh]h)}(hatomic64_add_negative_relaxedh]hatomic64_add_negative_relaxed}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|hhhj|hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jl)}j_j|sbc.atomic64_add_negative_relaxedasbuh1hhj|ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh)}(hjh]hi}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!}modnameN classnameNjcjf)}ji]j|c.atomic64_add_negative_relaxedasbuh1hhj}ubj=)}(h h]h }(hj=}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubj)}(hjh]h*}(hjK}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hjh]hv}(hjX}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubeh}(h]h ]h"]h$]h&]jj uh1jhj|hhhj|hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhj|hM ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1hhj|hM hj|hhubj )}(hhh]j9)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~}hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj|hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j}j4j}j5j6j7uh1hhhhj:hNhNubjp)}(hXS**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj}h]hs64 i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj}h]h atomic64_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubj9)}(h**Description**h]jz)}(hj6~h]h Description}(hj8~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4~ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjL~hhhNhNubjz)}(h**v**h]hv}(hjT~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL~ubh to (}(hjL~hhhNhNubjz)}(h**v**h]hv}(hjf~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL~ubh + }(hjL~hhhNhNubjz)}(h**i**h]hi}(hjx~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL~ubh) with relaxed ordering.}(hjL~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj9)}(h **Return**h]jz)}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh if the resulting value of }(hj~hhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh is negative, }(hj~hhhNhNubjz)}(h **false**h]hfalse}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh otherwise.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&atomic64_fetch_add_unless (C function)c.atomic64_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h;s64 atomic64_fetch_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h:s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_fetch_add_unlesssbc.atomic64_fetch_add_unlessasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj=hM ubh)}(hatomic64_fetch_add_unlessh]h)}(hj:h]hatomic64_fetch_add_unless}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj=hM ubj )}(h(atomic64_t *v, s64 a, s64 u)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]j8c.atomic64_fetch_add_unlessasbuh1hhjgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubj&)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j8c.atomic64_fetch_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubj&)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]j8c.atomic64_fetch_add_unlessasbuh1hhjubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj=hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj=hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj=hM hjhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj=hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jvj4jvj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]j?)}(hj؀h]hs64 a}(hjڀhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjրubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjҀubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjҀubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]j?)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjubeh}(h]h ]h"]h$]h&]uh1jhjzubj9)}(h**Description**h]jz)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjbhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh != }(hjbhhhNhNubjz)}(h**u**h]hu}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh), atomically updates }(hjbhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh to (}(hjbhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh + }(hjbhhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh!) with full ordering. Otherwise, }(hjbhhhNhNubjz)}(h**v**h]hv}(hjāhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh2 is not modified and relaxed ordering is provided.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj9)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_add_unless() there.}(hj݁hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic64_add_unless (C function)c.atomic64_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6bool atomic64_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h5bool atomic64_add_unless(atomic64_t *v, s64 a, s64 u)h](j)}(hjh]hbool}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjRhM ubh)}(hatomic64_add_unlessh]h)}(hatomic64_add_unlessh]hatomic64_add_unless}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjRhM ubj )}(h(atomic64_t *v, s64 a, s64 u)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jgsbc.atomic64_add_unlessasbuh1hhj}ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubj&)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hjڂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjׂubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj܂modnameN classnameNjcjf)}ji]jc.atomic64_add_unlessasbuh1hhjӂubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjӂubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӂubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubj&)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#modnameN classnameNjcjf)}ji]jc.atomic64_add_unlessasbuh1hhjubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjyubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhjRhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhjRhM ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhjRhM hj:hhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjshhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjRhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_add_unless() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj̃hM hj̓ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̃hM hjubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]j?)}(hjh]hs64 a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]j?)}(hj)h]hs64 u}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#ubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh != }(hjzhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh), atomically updates }(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh to (}(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh + }(hjzhhhNhNubjz)}(h**a**h]ha}(hjʄhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh!) with full ordering. Otherwise, }(hjzhhhNhNubjz)}(h**v**h]hv}(hj܄hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh2 is not modified and relaxed ordering is provided.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic64_inc_not_zero (C function)c.atomic64_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool atomic64_inc_not_zero (atomic64_t *v)h]h)}(h)bool atomic64_inc_not_zero(atomic64_t *v)h](j)}(hjh]hbool}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyhhhjhM ubh)}(hatomic64_inc_not_zeroh]h)}(hatomic64_inc_not_zeroh]hatomic64_inc_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhjhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic64_inc_not_zeroasbuh1hhjubj=)}(h h]h }(hj܅hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjyhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjhM ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjrhhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj:hNhNubjp)}(hXc**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjah]h atomic64_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhM hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<ubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj̆hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjކhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% + 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<ubj9)}(hEUnsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_inc_not_zero() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hj<ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hj<ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh if }(hj0hhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh was updated, }(hj0hhhNhNubjz)}(h **false**h]hfalse}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh otherwise.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_inc_unless_negative (C function)c.atomic64_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool atomic64_inc_unless_negative (atomic64_t *v)h]h)}(h0bool atomic64_inc_unless_negative(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM/ ubh)}(hatomic64_inc_unless_negativeh]h)}(hatomic64_inc_unless_negativeh]hatomic64_inc_unless_negative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM/ ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjЇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͇ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj҇modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic64_inc_unless_negativeasbuh1hhjɇubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjɇubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɇubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɇubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjŇubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM/ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM/ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM/ hjhhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ hj1hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jLj4jLj5j6j7uh1hhhhj:hNhNubjp)}(hXj**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjPubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjuh]h atomic64_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0 hjoubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM0 hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM0 hjlubah}(h]h ]h"]h$]h&]uh1jhjPubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjPubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjƈhhhNhNubjz)}(h**v**h]hv}(hjΈhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƈubh >= 0), atomically updates }(hjƈhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƈubh to (}(hjƈhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƈubh% + 1) with full ordering. Otherwise, }(hjƈhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƈubh2 is not modified and relaxed ordering is provided.}(hjƈhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjPubj9)}(hLUnsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_inc_unless_negative() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hjPubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6 hjPubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh if }(hjDhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh was updated, }(hjDhhhNhNubjz)}(h **false**h]hfalse}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh otherwise.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic64_dec_unless_positive (C function)c.atomic64_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h0bool atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMB ubh)}(hatomic64_dec_unless_positiveh]h)}(hatomic64_dec_unless_positiveh]hatomic64_dec_unless_positive}(hjʼnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMB ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jljsbc.atomic64_dec_unless_positiveasbuh1hhj݉ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj݉ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݉ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj݉ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjىubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMB ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMB ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMB hjhhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB hjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMB ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j`j4j`j5j6j7uh1hhhhj:hNhNubjp)}(hXj**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_dec_unless_positive() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjdubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMC hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjdubj9)}(h**Description**h]jz)}(hjĊh]h Description}(hjƊhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŠubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjdubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjڊhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڊubh <= 0), atomically updates }(hjڊhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڊubh to (}(hjڊhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڊubh% - 1) with full ordering. Otherwise, }(hjڊhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڊubh2 is not modified and relaxed ordering is provided.}(hjڊhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hjdubj9)}(hLUnsafe to use in noinstr code; use raw_atomic64_dec_unless_positive() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_dec_unless_positive() there.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjdubj9)}(h **Return**h]jz)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hjdubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh if }(hjXhhhNhNubjz)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh was updated, }(hjXhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh otherwise.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic64_dec_if_positive (C function)c.atomic64_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,s64 atomic64_dec_if_positive (atomic64_t *v)h]h)}(h+s64 atomic64_dec_if_positive(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_atomic64_dec_if_positivesbc.atomic64_dec_if_positiveasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubj=)}(h h]h }(hjދhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj݋hMU ubh)}(hatomic64_dec_if_positiveh]h)}(hjڋh]hatomic64_dec_if_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj݋hMU ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j؋c.atomic64_dec_if_positiveasbuh1hhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj݋hMU ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj݋hMU ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj݋hMU hjhhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj݋hMU ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXx**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjʌhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjƌhMV hjnjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƌhMV hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh > 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjubj9)}(h **Return**h]jz)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hjubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1), regardless of whether }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_read (C function)c.atomic_long_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.long atomic_long_read (const atomic_long_t *v)h]h)}(h-long atomic_long_read(const atomic_long_t *v)h](j)}(hlongh]hlong}(hjӍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjύhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjύhhhjhMh ubh)}(hatomic_long_readh]h)}(hatomic_long_readh]hatomic_long_read}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjύhhhjhMh ubj )}(h(const atomic_long_t *v)h]j&)}(hconst atomic_long_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj0modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_readasbuh1hhj ubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjύhhhjhMh ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjˍhhhjhMh ubah}(h]jƍah ](jjeh"]h$]h&]jj)jhuh1hhjhMh hjȍhhubj )}(hhh]j9)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hjhhubah}(h]h ]h"]h$]h&]uh1jhjȍhhhjhMh ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically loads the value of **v** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_read() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]j?)}(hjӎh]hconst atomic_long_t *v}(hjՎhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjюubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hj͎ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMi hjubah}(h]h ]h"]h$]h&]uh1jhj͎ubeh}(h]h ]h"]h$]h&]uh1jhjhMi hjʎubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj$hhhNhNubjz)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_long_read() there.h]h@Unsafe to use in noinstr code; use raw_atomic_long_read() there.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjlhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_read_acquire (C function)c.atomic_long_read_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_read_acquire (const atomic_long_t *v)h]h)}(h5long atomic_long_read_acquire(const atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMy ubh)}(hatomic_long_read_acquireh]h)}(hatomic_long_read_acquireh]hatomic_long_read_acquire}(hjΏhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʏubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMy ubj )}(h(const atomic_long_t *v)h]j&)}(hconst atomic_long_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jЏsbc.atomic_long_read_acquireasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMy ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMy ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMy hjhhubj )}(hhh]j9)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMy ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``const atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically loads the value of **v** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_read_acquire() there. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]j?)}(hjh]hconst atomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjƐhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMz hjÐubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMz hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_read_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_read_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_set (C function)c.atomic_long_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void atomic_long_set (atomic_long_t *v, long i)h]h)}(h.void atomic_long_set(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hatomic_long_seth]h)}(hatomic_long_seth]hatomic_long_set}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(atomic_long_t *v, long i)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjǑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjđubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjɑmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_setasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhM hj|hhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_set() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j?)}(hjْh]hlong i}(hjےhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjגubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӒubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjӒubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj*hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh to }(hj*hhhNhNubjz)}(h**i**h]hi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh with relaxed ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_set() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_set() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(h **Return**h]jz)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_long_set_release (C function)c.atomic_long_set_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h7void atomic_long_set_release (atomic_long_t *v, long i)h]h)}(h6void atomic_long_set_release(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj“hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hatomic_long_set_releaseh]h)}(hatomic_long_set_releaseh]hatomic_long_set_release}(hjԓhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjГubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(atomic_long_t *v, long i)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j֓sbc.atomic_long_set_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ih](j)}(hlongh]hlong}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh)}(hjh]hi}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_set_release() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj̔h]hatomic_long_t *v}(hjΔhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjʔubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjƔubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjƔubeh}(h]h ]h"]h$]h&]uh1jhjhM hjÔubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjÔubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjVhhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh to }(hjVhhhNhNubjz)}(h**i**h]hi}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh with release ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_long_set_release() there.h]hGUnsafe to use in noinstr code; use raw_atomic_long_set_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_add (C function)c.atomic_long_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void atomic_long_add (long i, atomic_long_t *v)h]h)}(h.void atomic_long_add(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjߕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjەhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjەhhhjhM ubh)}(hatomic_long_addh]h)}(hatomic_long_addh]hatomic_long_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjەhhhjhM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_addasbuh1hhjLubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjەhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjוhhhjhM ubah}(h]jҕah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjԕhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjԕhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jϖj4jϖj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjٖh]h Parameters}(hjۖhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjזubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj1h]hatomic_long_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj+ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhM hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjubeh}(h]h ]h"]h$]h&]uh1jhjӖubj9)}(h**Description**h]jz)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_add() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_add() there.}(hjǗhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubj9)}(h **Return**h]jz)}(hjؗh]hReturn}(hjڗhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj֗ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjӖubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_add_return (C function)c.atomic_long_add_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_add_return (long i, atomic_long_t *v)h]h)}(h5long atomic_long_add_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj+hM ubh)}(hatomic_long_add_returnh]h)}(hatomic_long_add_returnh]hatomic_long_add_return}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjVubh)}(hjh]hi}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjRubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j@sbc.atomic_long_add_returnasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj̘hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjRubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj+hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj+hM hjhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj6h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj0ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhM hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM hj-ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjoh]hatomic_long_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjiubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM hj-ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjșhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjڙhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj,hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_acquire (C function) c.atomic_long_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_add_return_acquire (long i, atomic_long_t *v)h]h)}(h=long atomic_long_add_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhj{hM ubh)}(hatomic_long_add_return_acquireh]h)}(hatomic_long_add_return_acquireh]hatomic_long_add_return_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj{hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjƚhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjޚubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_add_return_acquireasbuh1hhjښubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjښubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjښubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjښubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhj{hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhj{hM ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj{hM hjbhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjBhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhj:hNhNubjp)}(hX-**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj}ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj؛hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjԛhM hj՛ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԛhM hj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj9)}(h **Return**h]jz)}(hjfh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj|hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_release (C function) c.atomic_long_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_add_return_release (long i, atomic_long_t *v)h]h)}(h=long atomic_long_add_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj̜hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj˜hM ubh)}(hatomic_long_add_return_releaseh]h)}(hatomic_long_add_return_releaseh]hatomic_long_add_return_release}(hjޜhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjڜubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj˜hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_add_return_releaseasbuh1hhj*ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hjh]hv}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj˜hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj˜hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj˜hM hjhhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj˜hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX-**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj֝h]hlong i}(hj؝hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԝubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjНubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjНubeh}(h]h ]h"]h$]h&]uh1jhjhM hj͝ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hM hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hj͝ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj`hhhNhNubjz)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh to (}(hj`hhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh + }(hj`hhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh) with release ordering.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj̞hhhNhNubjz)}(h**v**h]hv}(hjԞhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̞ubh.}(hj̞hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_add_return_relaxed (C function) c.atomic_long_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_add_return_relaxed (long i, atomic_long_t *v)h]h)}(h=long atomic_long_add_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhM ubh)}(hatomic_long_add_return_relaxedh]h)}(hatomic_long_add_return_relaxedh]hatomic_long_add_return_relaxed}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubh)}(hjh]hi}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j0sb c.atomic_long_add_return_relaxedasbuh1hhjzubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX-**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj&h]hlong i}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj_h]hatomic_long_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjʠhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjܠhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_add (C function)c.atomic_long_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_add (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_add(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYhhhjkhM ubh)}(hatomic_long_fetch_addh]h)}(hatomic_long_fetch_addh]hatomic_long_fetch_add}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjkhM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjѡhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΡubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjӡmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_addasbuh1hhjʡubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʡubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʡubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʡubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjYhhhjkhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjkhM ubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1hhjkhM hjRhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj2hhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jMj4jMj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_add() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjvh]hlong i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjpubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM hjmubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjȢhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjĢhM hjŢubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĢhM hjmubeh}(h]h ]h"]h$]h&]uh1jhjQubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_add() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_add() there.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj9)}(h **Return**h]jz)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj9)}(hThe original value of **v**.h](hThe original value of }(hjlhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_add_acquire (C function)c.atomic_long_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(hhjĤubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjߤhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjۤhM hjܤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۤhM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjPhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh to (}(hjPhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh + }(hjPhhhNhNubjz)}(h**i**h]hi}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh) with acquire ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM! hjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM% hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjĥhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM& hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_add_release (C function)c.atomic_long_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_release (long i, atomic_long_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hM1 hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM1 hj ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjOh]hatomic_long_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 hjIubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhM2 hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM2 hj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4 hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj̧hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 hjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5 hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_add_relaxed (C function)c.atomic_long_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_relaxed (long i, atomic_long_t *v)h]h)}(hhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMD hj`ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hMD hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMD hj]ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhME hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhME hj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hjکh]h Description}(hjܩhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjةubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjAubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjAubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_relaxed() there.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjAubj9)}(h **Return**h]jz)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJ hjAubj9)}(hThe original value of **v**.h](hThe original value of }(hj\hhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMK hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_sub (C function)c.atomic_long_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void atomic_long_sub (long i, atomic_long_t *v)h]h)}(h.void atomic_long_sub(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMU ubh)}(hatomic_long_subh]h)}(hatomic_long_subh]hatomic_long_sub}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMU ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjڪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֪ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj֪ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֪ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjҪubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_subasbuh1hhj ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjҪubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMU ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMU ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMU hjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMU ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjϫhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj˫hMV hj̫ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˫hMV hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMW hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMW hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMW hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj@hhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh to (}(hj@hhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh - }(hj@hhhNhNubjz)}(h**i**h]hi}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh) with relaxed ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMX hjubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_sub() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZ hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM] hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_sub_return (C function)c.atomic_long_sub_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_sub_return (long i, atomic_long_t *v)h]h)}(h5long atomic_long_sub_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj۬hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׬hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj׬hhhjhMg ubh)}(hatomic_long_sub_returnh]h)}(hatomic_long_sub_returnh]hatomic_long_sub_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj׬hhhjhMg ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_sub_returnasbuh1hhjHubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj׬hhhjhMg ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjӬhhhjhMg ubah}(h]jάah ](jjeh"]h$]h&]jj)jhuh1hhjhMg hjЬhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMg hjhhubah}(h]h ]h"]h$]h&]uh1jhjЬhhhjhMg ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j˭j4j˭j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjխh]h Parameters}(hj׭hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӭubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjϭubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMh hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMh hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj-h]hatomic_long_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMi hj'ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMi hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMi hjubeh}(h]h ]h"]h$]h&]uh1jhjϭubj9)}(h**Description**h]jz)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjϭubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj~hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh to (}(hj~hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh - }(hj~hhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh) with full ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjϭubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_long_sub_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_sub_return() there.}(hjîhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjϭubj9)}(h **Return**h]jz)}(hjԮh]hReturn}(hj֮hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҮubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hjϭubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjϭubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_sub_return_acquire (C function) c.atomic_long_sub_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj9hMz ubh)}(hatomic_long_sub_return_acquireh]h)}(hatomic_long_sub_return_acquireh]hatomic_long_sub_return_acquire}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hMz ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jNsb c.atomic_long_sub_return_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjͯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjگhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hMz ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hMz ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj9hMz hj hhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMz ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX2**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjDh]hlong i}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hj>ubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhM{ hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM{ hj;ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj}h]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjwubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM| hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM| hj;ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjΰhhhNhNubjz)}(h**v**h]hv}(hjְhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΰubh to (}(hjΰhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΰubh - }(hjΰhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΰubh) with acquire ordering.}(hjΰhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj:hhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_sub_return_release (C function) c.atomic_long_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_release (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjhM ubh)}(hatomic_long_sub_return_releaseh]h)}(hatomic_long_sub_return_releaseh]hatomic_long_sub_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjhM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjƱhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjԱhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_sub_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjhM ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjphhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjPhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj:hNhNubjp)}(hX2**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjͲh]hatomic_long_t *v}(hjϲhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj˲ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjDzubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjDzubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_sub_return_relaxed (C function) c.atomic_long_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_relaxed (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj˳hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdzhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjڳhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdzhhhjٳhM ubh)}(hatomic_long_sub_return_relaxedh]h)}(hatomic_long_sub_return_relaxedh]hatomic_long_sub_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjdzhhhjٳhM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjAmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_sub_return_relaxedasbuh1hhj8ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hjh]hv}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjdzhhhjٳhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjóhhhjٳhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjٳhM hjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjٳhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX2**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjŴh]h Parameters}(hjǴhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjôubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj޴ubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhj޴ubeh}(h]h ]h"]h$]h&]uh1jhjhM hj۴ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hM hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM hj۴ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjnhhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh to (}(hjnhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh - }(hjnhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh) with relaxed ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjĵh]hReturn}(hjƵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjµubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjڵhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڵubh.}(hjڵhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_sub (C function)c.atomic_long_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj)hM ubh)}(hatomic_long_fetch_subh]h)}(hatomic_long_fetch_subh]hatomic_long_fetch_sub}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj)hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubh)}(hjh]hi}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j>sbc.atomic_long_fetch_subasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjʶhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj)hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj)hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj)hM hjhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hj4h]hlong i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.ubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhM hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM hj+ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjmh]hatomic_long_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjgubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM hj+ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjƷhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjطhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hj*hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_sub_acquire (C function)c.atomic_long_fetch_sub_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_acquire (long i, atomic_long_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj~ubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM hj{ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjֹhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjҹhM hjӹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҹhM hj{ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_acquire() there.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(h **Return**h]jz)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj9)}(hThe original value of **v**.h](hThe original value of }(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_sub_release (C function)c.atomic_long_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_release (long i, atomic_long_t *v)h]h)}(hhjһubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjλubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjλubeh}(h]h ]h"]h$]h&]uh1jhjhM hj˻ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hM hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM hj˻ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj^hhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh to (}(hj^hhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh - }(hj^hhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh) with release ordering.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjʼhhhNhNubjz)}(h**v**h]hv}(hjҼhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʼubh.}(hjʼhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_sub_relaxed (C function)c.atomic_long_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_relaxed (long i, atomic_long_t *v)h]h)}(hhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj]h]hatomic_long_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjWubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhM hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjȾhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjھhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_inc (C function)c.atomic_long_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'void atomic_long_inc (atomic_long_t *v)h]h)}(h&void atomic_long_inc(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWhhhjihM ubh)}(hatomic_long_inch]h)}(hatomic_long_inch]hatomic_long_inc}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjihM ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j~sbc.atomic_long_incasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjɿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjֿhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjWhhhjihM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjihM ubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1hhjihM hjPhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj@h]hatomic_long_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj:ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM hj7ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_inc() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_inc() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_inc_return (C function)c.atomic_long_inc_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.long atomic_long_inc_return (atomic_long_t *v)h]h)}(h-long atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj(hM ubh)}(hatomic_long_inc_returnh]h)}(hatomic_long_inc_returnh]hatomic_long_inc_return}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj(hM ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jl)}j_j=sbc.atomic_long_inc_returnasbuh1hhjSubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj(hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj(hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj(hM hjhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjPhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh to (}(hjPhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh + 1) with full ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_acquire (C function) c.atomic_long_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_acquire (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_inc_return_acquireh]h)}(hatomic_long_inc_return_acquireh]hatomic_long_inc_return_acquire}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_inc_return_acquireasbuh1hhj$ubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hjh]hv}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj!hhhNhNubjz)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh to (}(hj!hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh + 1) with acquire ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_acquire() there.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubj9)}(h **Return**h]jz)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj{hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_release (C function) c.atomic_long_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_release (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM/ubh)}(hatomic_long_inc_return_releaseh]h)}(hatomic_long_inc_return_releaseh]hatomic_long_inc_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM/ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_inc_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM/ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM/hjhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj|ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhj|ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj|ubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj|ubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_release() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj|ubj9)}(h **Return**h]jz)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj|ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjLhhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_inc_return_relaxed (C function) c.atomic_long_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_relaxed (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMAubh)}(hatomic_long_inc_return_relaxedh]h)}(hatomic_long_inc_return_relaxedh]hatomic_long_inc_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMAubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_inc_return_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMAubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMAhjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj.hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjMubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjrh]hatomic_long_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjlubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjiubah}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjMubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjMubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjMubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjMubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_inc (C function)c.atomic_long_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-long atomic_long_fetch_inc (atomic_long_t *v)h]h)}(h,long atomic_long_fetch_inc(atomic_long_t *v)h](j)}(hlongh]hlong}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhjlhMRubh)}(hatomic_long_fetch_inch]h)}(hatomic_long_fetch_inch]hatomic_long_fetch_inc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMRubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_incasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhMRubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjlhMRhjShhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjCh]hatomic_long_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj=ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMShjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMShj:ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_acquire (C function)c.atomic_long_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_acquire (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+hhhj=hMdubh)}(hatomic_long_fetch_inc_acquireh]h)}(hatomic_long_fetch_inc_acquireh]hatomic_long_fetch_inc_acquire}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj=hMdubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjqmodnameN classnameNjcjf)}ji]jl)}j_jRsbc.atomic_long_fetch_inc_acquireasbuh1hhjhubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjdubah}(h]h ]h"]h$]h&]jj uh1jhj+hhhj=hMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj=hMdubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1hhj=hMdhj$hhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMehj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMehj ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjehhhNhNubjz)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh to (}(hjehhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh + 1) with acquire ordering.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_release (C function)c.atomic_long_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_release (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMuubh)}(hatomic_long_fetch_inc_releaseh]h)}(hatomic_long_fetch_inc_releaseh]hatomic_long_fetch_inc_release}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMuubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjBmodnameN classnameNjcjf)}ji]jl)}j_j#sbc.atomic_long_fetch_inc_releaseasbuh1hhj9ubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hjh]hv}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMuhjhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj6hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh to (}(hj6hhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh + 1) with release ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_release() there.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj9)}(h **Return**h]jz)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_inc_relaxed (C function)c.atomic_long_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_relaxed (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_fetch_inc_relaxedh]h)}(hatomic_long_fetch_inc_relaxedh]hatomic_long_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_inc_relaxedasbuh1hhj ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hvU}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjahhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_dec (C function)c.atomic_long_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'void atomic_long_dec (atomic_long_t *v)h]h)}(h&void atomic_long_dec(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_dech]h)}(hatomic_long_dech]hatomic_long_dec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_decasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^j4j^j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_dec() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_dec() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubj9)}(hNothing.h]hNothing.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_dec_return (C function)c.atomic_long_dec_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.long atomic_long_dec_return (atomic_long_t *v)h]h)}(h-long atomic_long_dec_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]hhhjohMubh)}(hatomic_long_dec_returnh]h)}(hatomic_long_dec_returnh]hatomic_long_dec_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjohMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_dec_returnasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj]hhhjohMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1hhjohMhjVhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjFh]hatomic_long_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_long_dec_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_dec_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_acquire (C function) c.atomic_long_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_acquire (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.hhhj@hMubh)}(hatomic_long_dec_return_acquireh]h)}(hatomic_long_dec_return_acquireh]hatomic_long_dec_return_acquire}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj@hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjtmodnameN classnameNjcjf)}ji]jl)}j_jUsb c.atomic_long_dec_return_acquireasbuh1hhjkubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubah}(h]h ]h"]h$]h&]jj uh1jhj.hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj@hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1hhj@hMhj'hhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhhNhNubjz)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh to (}(hjhhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh - 1) with acquire ordering.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_release (C function) c.atomic_long_dec_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_release (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_dec_return_releaseh]h)}(hatomic_long_dec_return_releaseh]hatomic_long_dec_return_release}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jl)}j_j&sb c.atomic_long_dec_return_releaseasbuh1hhj<ubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hjh]hv}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj8ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return_release() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj9hhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh to (}(hj9hhhNhNubjz)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh - 1) with release ordering.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_release() there.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+atomic_long_dec_return_relaxed (C function) c.atomic_long_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_relaxed (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_dec_return_relaxedh]h)}(hatomic_long_dec_return_relaxedh]hatomic_long_dec_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.atomic_long_dec_return_relaxedasbuh1hhj ubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh - 1) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjdhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_dec (C function)c.atomic_long_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-long atomic_long_fetch_dec (atomic_long_t *v)h]h)}(h,long atomic_long_fetch_dec(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_fetch_dech]h)}(hatomic_long_fetch_dech]hatomic_long_fetch_dec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_decasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj9)}(hThe original value of **v**.h](hThe original value of }(hj5hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_acquire (C function)c.atomic_long_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_acquire (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrhhhjhMubh)}(hatomic_long_fetch_dec_acquireh]h)}(hatomic_long_fetch_dec_acquireh]hatomic_long_fetch_dec_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjrhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_dec_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjrhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjkhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj[h]hatomic_long_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_release (C function)c.atomic_long_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_release (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjUhMubh)}(hatomic_long_fetch_dec_releaseh]h)}(hatomic_long_fetch_dec_releaseh]hatomic_long_fetch_dec_release}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjUhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jjsbc.atomic_long_fetch_dec_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubah}(h]h ]h"]h$]h&]jj uh1jhjChhhjUhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhjUhMubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhjUhMhj<hhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj,h]hatomic_long_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj}hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh to (}(hj}hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubh - 1) with release ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_dec_relaxed (C function)c.atomic_long_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj&hM$ubh)}(hatomic_long_fetch_dec_relaxedh]h)}(hatomic_long_fetch_dec_relaxedh]hatomic_long_fetch_dec_relaxed}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj&hM$ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jl)}j_j;sbc.atomic_long_fetch_dec_relaxedasbuh1hhjQubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hM$ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hM$ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj&hM$hj hhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hM$ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjNhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh to (}(hjNhhhNhNubjz)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh - 1) with relaxed ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_and (C function)c.atomic_long_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void atomic_long_and (long i, atomic_long_t *v)h]h)}(h.void atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM5ubh)}(hatomic_long_andh]h)}(hatomic_long_andh]hatomic_long_and}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM5ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubh)}(hjh]hi}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj_modnameN classnameNjcjf)}ji]jl)}j_j sbc.atomic_long_andasbuh1hhjVubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM5hjhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_and() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj;h]hatomic_long_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj5ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhM7hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_and() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_and() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_and (C function)c.atomic_long_fetch_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_and (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_and(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#hhhj5hMGubh)}(hatomic_long_fetch_andh]h)}(hatomic_long_fetch_andh]hatomic_long_fetch_and}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj5hMGubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jJsbc.atomic_long_fetch_andasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubeh}(h]h ]h"]h$]h&]jj uh1jhj#hhhj5hMGubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj5hMGubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj5hMGhjhhubj )}(hhh]j9)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMGubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_and() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj@h]hlong i}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhj:ubj)}(hhh]j9)}(h long valueh]h long value}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhMHhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMHhj7ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjyh]hatomic_long_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjsubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.h3hMNhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_and_acquire (C function)c.atomic_long_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_acquire (long i, atomic_long_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubeh}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjkubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjkubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_acquire() there.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjkubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjkubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_and_release (C function)c.atomic_long_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_release (long i, atomic_long_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMnhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMnhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjjhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh to (}(hjjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh & }(hjjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh) with release ordering.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_and_relaxed (C function)c.atomic_long_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_relaxed (long i, atomic_long_t *v)h]h)}(hhj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*ubj)}(hhh]j9)}(h long valueh]h long value}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjih]hatomic_long_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjcubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj&hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_andnot (C function)c.atomic_long_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2void atomic_long_andnot (long i, atomic_long_t *v)h]h)}(h1void atomic_long_andnot(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjchhhjuhMubh)}(hatomic_long_andnoth]h)}(hatomic_long_andnoth]hatomic_long_andnot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjuhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_andnotasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1hhjuhMhj\hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jWj4jWj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_andnot() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh & }(hj hhhNhNubjz)}(h**~i**h]h~i}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.h]hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj9)}(hNothing.h]hNothing.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_fetch_andnot (C function)c.atomic_long_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8long atomic_long_fetch_andnot (long i, atomic_long_t *v)h]h)}(h7long atomic_long_fetch_andnot(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_fetch_andnoth]h)}(hatomic_long_fetch_andnoth]hatomic_long_fetch_andnot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_andnotasbuh1hhjubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjHhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh to (}(hjHhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh & }(hjHhhhNhNubjz)}(h**~i**h]h~i}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh) with full ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_acquire (C function)"c.atomic_long_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_acquire (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h atomic_long_fetch_andnot_acquireh]h)}(h atomic_long_fetch_andnot_acquireh]h atomic_long_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hjh]hi}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jl)}j_jsb"c.atomic_long_fetch_andnot_acquireasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX***Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h long valueh]h long value}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjGh]hatomic_long_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_release (C function)"c.atomic_long_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_release (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjShMubh)}(h atomic_long_fetch_andnot_releaseh]h)}(h atomic_long_fetch_andnot_releaseh]h atomic_long_fetch_andnot_release}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjShMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jhsb"c.atomic_long_fetch_andnot_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhjShMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhjShMhj:hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj:hNhNubjp)}(hX***Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj^h]hlong i}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]j9)}(h long valueh]h long value}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj9)}(h **Return**h]jz)}(hj>h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj9)}(hThe original value of **v**.h](hThe original value of }(hjThhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_fetch_andnot_relaxed (C function)"c.atomic_long_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_relaxed (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h atomic_long_fetch_andnot_relaxedh]h)}(h atomic_long_fetch_andnot_relaxedh]h atomic_long_fetch_andnot_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsb"c.atomic_long_fetch_andnot_relaxedasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX***Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj8hhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh to (}(hj8hhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh & }(hj8hhhNhNubjz)}(h**~i**h]h~i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh) with relaxed ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_relaxed() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_relaxed() there.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_or (C function)c.atomic_long_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.void atomic_long_or (long i, atomic_long_t *v)h]h)}(h-void atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_orh]h)}(hatomic_long_orh]hatomic_long_or}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_orasbuh1hhjRubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_or() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj7h]hatomic_long_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h>Unsafe to use in noinstr code; use raw_atomic_long_or() there.h]h>Unsafe to use in noinstr code; use raw_atomic_long_or() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!atomic_long_fetch_or (C function)c.atomic_long_fetch_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4long atomic_long_fetch_or (long i, atomic_long_t *v)h]h)}(h3long atomic_long_fetch_or(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj1hMubh)}(hatomic_long_fetch_orh]h)}(hatomic_long_fetch_orh]hatomic_long_fetch_or}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj1hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubh)}(hjh]hi}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jFsbc.atomic_long_fetch_orasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjXubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj1hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj1hMhjhhubj )}(hhh]j9)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_or() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.h hMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj<h]hlong i}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj)}(hhh]j9)}(h long valueh]h long value}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjuh]hatomic_long_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjoubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hDUnsafe to use in noinstr code; use raw_atomic_long_fetch_or() there.h]hDUnsafe to use in noinstr code; use raw_atomic_long_fetch_or() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_or_acquire (C function)c.atomic_long_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj9)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_acquire() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_acquire() there.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj9)}(h **Return**h]jz)}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_or_release (C function)c.atomic_long_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hM&hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM&hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjfhhhNhNubjz)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh to (}(hjfhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh | }(hjfhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh) with release ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjubj9)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_release() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_or_relaxed (C function)c.atomic_long_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hj&ubj)}(hhh]j9)}(h long valueh]h long value}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhM8hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM8hj#ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjeh]hatomic_long_t *v}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj_ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhM9hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhM9hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjubj9)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_relaxed() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_or_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubj9)}(hThe original value of **v**.h](hThe original value of }(hj"hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_xor (C function)c.atomic_long_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void atomic_long_xor (long i, atomic_long_t *v)h]h)}(h.void atomic_long_xor(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_hhhjqhMIubh)}(hatomic_long_xorh]h)}(hatomic_long_xorh]hatomic_long_xor}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjqhMIubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_xorasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhjqhMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjqhMIubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjqhMIhjXhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhj8hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhMIubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_xor() there. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjWubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj|h]hlong i}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjvubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjsubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjsubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjWubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjWubj9)}(h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjWubj9)}(h **Return**h]jz)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjWubj9)}(hNothing.h]hNothing.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"atomic_long_fetch_xor (C function)c.atomic_long_fetch_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_xor (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_xor(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM[ubh)}(hatomic_long_fetch_xorh]h)}(hatomic_long_fetch_xorh]hatomic_long_fetch_xor}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM[ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_fetch_xorasbuh1hhjubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM[ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM[ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM[hjhhubj )}(hhh]j9)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM[ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjubj)}(hhh]j9)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM]hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjDhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh to (}(hjDhhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh ^ }(hjDhhhNhNubjz)}(h**i**h]hi}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh) with full ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjubj9)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_xor_acquire (C function)c.atomic_long_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_xor_acquire (long i, atomic_long_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjubj)}(hhh]j9)}(h long valueh]h long value}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMohj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjCh]hatomic_long_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj=ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhMphjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMphjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_xor_release (C function)c.atomic_long_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_xor_release (long i, atomic_long_t *v)h]h)}(hhjX ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjT ubj)}(hhh]j9)}(h long valueh]h long value}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjo hMhjp ubah}(h]h ]h"]h$]h&]uh1jhjT ubeh}(h]h ]h"]h$]h&]uh1jhjo hMhjQ ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjQ ubeh}(h]h ]h"]h$]h&]uh1jhj5 ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5 ubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh ^ }(hj hhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5 ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_release() there.}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5 ubj9)}(h **Return**h]jz)}(hj: h]hReturn}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8 ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5 ubj9)}(hThe original value of **v**.h](hThe original value of }(hjP hhhNhNubjz)}(h**v**h]hv}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP ubh.}(hjP hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5 ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*atomic_long_fetch_xor_relaxed (C function)c.atomic_long_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_xor_relaxed (long i, atomic_long_t *v)h]h)}(hhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(h long valueh]h long value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj4 hhhNhNubjz)}(h**v**h]hv}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4 ubh to (}(hj4 hhhNhNubjz)}(h**v**h]hv}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4 ubh ^ }(hj4 hhhNhNubjz)}(h**i**h]hi}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4 ubh) with relaxed ordering.}(hj4 hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_relaxed() there.}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌatomic_long_xchg (C function)c.atomic_long_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2long atomic_long_xchg (atomic_long_t *v, long new)h]h)}(h1long atomic_long_xchg(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hMubh)}(hatomic_long_xchgh]h)}(hatomic_long_xchgh]hatomic_long_xchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#modnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_xchgasbuh1hhjubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhj hhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj4h]hlong new}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h@Unsafe to use in noinstr code; use raw_atomic_long_xchg() there.h]h@Unsafe to use in noinstr code; use raw_atomic_long_xchg() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_xchg_acquire (C function)c.atomic_long_xchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_acquire (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_acquire(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj.hMubh)}(hatomic_long_xchg_acquireh]h)}(hatomic_long_xchg_acquireh]hatomic_long_xchg_acquire}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj.hMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjbmodnameN classnameNjcjf)}ji]jl)}j_jCsbc.atomic_long_xchg_acquireasbuh1hhjYubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubj&)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj.hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj.hMhjhhubj )}(hhh]j9)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj:h]hatomic_long_t *v}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjsh]hlong new}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_xchg_release (C function)c.atomic_long_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_release (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_release(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[hhhjmhMubh)}(hatomic_long_xchg_releaseh]h)}(hatomic_long_xchg_releaseh]hatomic_long_xchg_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj[hhhjmhMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_xchg_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj[hhhjmhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjmhMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1hhjmhMhjThhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj:hNhNubjp)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjyh]hatomic_long_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_release() there.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(h **Return**h]jz)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubj9)}(hThe original value of **v**.h](hThe original value of }(hj]hhhNhNubjz)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_xchg_relaxed (C function)c.atomic_long_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_relaxed (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_relaxed(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_xchg_relaxedh]h)}(hatomic_long_xchg_relaxedh]hatomic_long_xchg_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_xchg_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hnewh]hnew}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjBhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh to }(hjBhhhNhNubjz)}(h**new**h]hnew}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh with relaxed ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ atomic_long_cmpxchg (C function)c.atomic_long_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h?long atomic_long_cmpxchg (atomic_long_t *v, long old, long new)h]h)}(h>long atomic_long_cmpxchg(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_cmpxchgh]h)}(hatomic_long_cmpxchgh]hatomic_long_cmpxchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_cmpxchgasbuh1hhjubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong oldh](j)}(hlongh]hlong}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj,h]hatomic_long_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hjeh]hlong old}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj#ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hCUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there.h]hCUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_cmpxchg_acquire (C function)c.atomic_long_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_acquire (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_cmpxchg_acquireh]h)}(hatomic_long_cmpxchg_acquireh]hatomic_long_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong oldh](j)}(hlongh]hlong}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOubh)}(holdh]hold}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hjHh]hlong old}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(h **Return**h]jz)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_cmpxchg_release (C function)c.atomic_long_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_release (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hatomic_long_cmpxchg_releaseh]h)}(hatomic_long_cmpxchg_releaseh]hatomic_long_cmpxchg_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_cmpxchg_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong oldh](j)}(hlongh]hlong}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubh)}(holdh]hold}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hj+h]hlong old}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjdh]hlong new}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with release ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj9)}(h **Return**h]jz)}(hj/h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjEhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_cmpxchg_relaxed (C function)c.atomic_long_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_relaxed (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM-ubh)}(hatomic_long_cmpxchg_relaxedh]h)}(hatomic_long_cmpxchg_relaxedh]hatomic_long_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM-ubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.atomic_long_cmpxchg_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong oldh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj' hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(holdh]hold}(hj5 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong newh](j)}(hlongh]hlong}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ ubj=)}(h h]h }(hj\ hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJ ubh)}(hnewh]hnew}(hjj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJ ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhM-ubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjhM-hj{hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hj hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhM-ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM.hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM.hj ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hj!h]hlong old}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj !ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj!ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hj'!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#!hM/hj$!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj#!hM/hj ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjG!h]hlong new}(hjI!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE!ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjA!ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj`!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\!hM0hj]!ubah}(h]h ]h"]h$]h&]uh1jhjA!ubeh}(h]h ]h"]h$]h&]uh1jhj\!hM0hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh == }(hj!hhhNhNubjz)}(h**old**h]hold}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh), atomically updates }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh to }(hj!hhhNhNubjz)}(h**new**h]hnew}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh# with relaxed ordering. Otherwise, }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh2 is not modified and relaxed ordering is provided.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hj ubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_relaxed() there.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hj ubj9)}(h **Return**h]jz)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj("hhhNhNubjz)}(h**v**h]hv}(hj0"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj("ubh.}(hj("hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$atomic_long_try_cmpxchg (C function)c.atomic_long_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool atomic_long_try_cmpxchg (atomic_long_t *v, long *old, long new)h]h)}(hCbool atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hji"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje"hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAubj=)}(h h]h }(hjw"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hje"hhhjv"hMAubh)}(hatomic_long_try_cmpxchgh]h)}(hatomic_long_try_cmpxchgh]hatomic_long_try_cmpxchg}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhje"hhhjv"hMAubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jl)}j_j"sbc.atomic_long_try_cmpxchgasbuh1hhj"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hjh]hv}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubj&)}(h long *oldh](j)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj=)}(h h]h }(hj #hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(holdh]hold}(hj$#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubj&)}(hlong newh](j)}(hlongh]hlong}(hj=#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9#ubj=)}(h h]h }(hjK#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9#ubh)}(hnewh]hnew}(hjY#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubeh}(h]h ]h"]h$]h&]jj uh1jhje"hhhjv"hMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhja"hhhjv"hMAubah}(h]j\"ah ](jjeh"]h$]h&]jj)jhuh1hhjv"hMAhj^"hhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj#hhubah}(h]h ]h"]h$]h&]uh1jhj^"hhhjv"hMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j#j4j#j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj#ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj#h]hatomic_long_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj#ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMBhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMBhj#ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hj#h]h long *old}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChj#ubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hMChj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMChj#ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj6$h]hlong new}(hj8$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4$ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj0$ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjO$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjK$hMDhjL$ubah}(h]h ]h"]h$]h&]uh1jhj0$ubeh}(h]h ]h"]h$]h&]uh1jhjK$hMDhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubj9)}(h**Description**h]jz)}(hjq$h]h Description}(hjs$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo$ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj#ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj$hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh == }(hj$hhhNhNubjz)}(h**old**h]hold}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh), atomically updates }(hj$hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh to }(hj$hhhNhNubjz)}(h**new**h]hnew}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh with full ordering. Otherwise, }(hj$hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh is not modified, }(hj$hhhNhNubjz)}(h**old**h]hold}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh$ is updated to the current value of }(hj$hhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh#, and relaxed ordering is provided.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj#ubj9)}(hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.h]hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhj#ubj9)}(h **Return**h]jz)}(hj%%h]hReturn}(hj'%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#%ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj#ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj?%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;%ubh if the exchange occurred, }(hj;%hhhNhNubjz)}(h **false**h]hfalse}(hjQ%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;%ubh otherwise.}(hj;%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_acquire (C function)!c.atomic_long_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_acquire (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj%hMXubh)}(hatomic_long_try_cmpxchg_acquireh]h)}(hatomic_long_try_cmpxchg_acquireh]hatomic_long_try_cmpxchg_acquire}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj%hMXubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%modnameN classnameNjcjf)}ji]jl)}j_j%sb!c.atomic_long_try_cmpxchg_acquireasbuh1hhj%ubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubj&)}(h long *oldh](j)}(hlongh]hlong}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj=)}(h h]h }(hj*&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj8&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(holdh]hold}(hjE&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubj&)}(hlong newh](j)}(hlongh]hlong}(hj^&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ&ubj=)}(h h]h }(hjl&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZ&ubh)}(hnewh]hnew}(hjz&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubeh}(h]h ]h"]h$]h&]jj uh1jhj%hhhj%hMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj%hMXubah}(h]j}%ah ](jjeh"]h$]h&]jj)jhuh1hhj%hMXhj%hhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hMXubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hj&ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj&h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhj&ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMYhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMYhj&ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hj'h]h long *old}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhj'ubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj7'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3'hMZhj4'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj3'hMZhj&ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjW'h]hlong new}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjU'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjQ'ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjp'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjl'hM[hjm'ubah}(h]h ]h"]h$]h&]uh1jhjQ'ubeh}(h]h ]h"]h$]h&]uh1jhjl'hM[hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hj&ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh == }(hj'hhhNhNubjz)}(h**old**h]hold}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh), atomically updates }(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh to }(hj'hhhNhNubjz)}(h**new**h]hnew}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh# with acquire ordering. Otherwise, }(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh is not modified, }(hj'hhhNhNubjz)}(h**old**h]hold}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh$ is updated to the current value of }(hj'hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh#, and relaxed ordering is provided.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hj&ubj9)}(hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there.}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj&ubj9)}(h **Return**h]jz)}(hjF(h]hReturn}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD(ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj&ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj`(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\(ubh if the exchange occurred, }(hj\(hhhNhNubjz)}(h **false**h]hfalse}(hjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\(ubh otherwise.}(hj\(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_release (C function)!c.atomic_long_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_release (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(hhhj(hMnubh)}(hatomic_long_try_cmpxchg_releaseh]h)}(hatomic_long_try_cmpxchg_releaseh]hatomic_long_try_cmpxchg_release}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj(hMnubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]jl)}j_j(sb!c.atomic_long_try_cmpxchg_releaseasbuh1hhj(ubj=)}(h h]h }(hj )hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hjh]hv}(hj%)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(h long *oldh](j)}(hlongh]hlong}(hj=)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9)ubj=)}(h h]h }(hjK)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9)ubj)}(hjh]h*}(hjY)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9)ubh)}(holdh]hold}(hjf)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hlong newh](j)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{)ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{)ubh)}(hnewh]hnew}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj(hMnubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj(hMnubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhj(hMnhj(hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMnubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j)j4j)j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj)ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj*h]hatomic_long_t *v}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj*ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMohj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMohj)ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hj?*h]h long *old}(hjA*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj9*ubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjX*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjT*hMphjU*ubah}(h]h ]h"]h$]h&]uh1jhj9*ubeh}(h]h ]h"]h$]h&]uh1jhjT*hMphj)ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjx*h]hlong new}(hjz*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjv*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjr*ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hMqhj*ubah}(h]h ]h"]h$]h&]uh1jhjr*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMqhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj)ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj*hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh == }(hj*hhhNhNubjz)}(h**old**h]hold}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh), atomically updates }(hj*hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh to }(hj*hhhNhNubjz)}(h**new**h]hnew}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh# with release ordering. Otherwise, }(hj*hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh is not modified, }(hj*hhhNhNubjz)}(h**old**h]hold}(hj++hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh$ is updated to the current value of }(hj*hhhNhNubjz)}(h**v**h]hv}(hj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh#, and relaxed ordering is provided.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj)ubj9)}(hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there.}(hjV+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj)ubj9)}(h **Return**h]jz)}(hjg+h]hReturn}(hji+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje+ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj)ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}+ubh if the exchange occurred, }(hj}+hhhNhNubjz)}(h **false**h]hfalse}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}+ubh otherwise.}(hj}+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_try_cmpxchg_relaxed (C function)!c.atomic_long_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_relaxed (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_relaxed(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+hhhj+hMubh)}(hatomic_long_try_cmpxchg_relaxedh]h)}(hatomic_long_try_cmpxchg_relaxedh]hatomic_long_try_cmpxchg_relaxed}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj+hMubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj ,modnameN classnameNjcjf)}ji]jl)}j_j+sb!c.atomic_long_try_cmpxchg_relaxedasbuh1hhj,ubj=)}(h h]h }(hj+,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubj)}(hjh]h*}(hj9,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hjh]hv}(hjF,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubj&)}(h long *oldh](j)}(hlongh]hlong}(hj^,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ,ubj=)}(h h]h }(hjl,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZ,ubj)}(hjh]h*}(hjz,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ,ubh)}(holdh]hold}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubj&)}(hlong newh](j)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubh)}(hnewh]hnew}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubeh}(h]h ]h"]h$]h&]jj uh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhj+hMhj+hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj-h]h Parameters}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj'-h]hatomic_long_t *v}(hj)-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!-ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj@-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<-hMhj=-ubah}(h]h ]h"]h$]h&]uh1jhj!-ubeh}(h]h ]h"]h$]h&]uh1jhj<-hMhj-ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hj`-h]h long *old}(hjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZ-ubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjy-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hju-hMhjv-ubah}(h]h ]h"]h$]h&]uh1jhjZ-ubeh}(h]h ]h"]h$]h&]uh1jhju-hMhj-ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj-h]hlong new}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(h**Description**h]jz)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh == }(hj-hhhNhNubjz)}(h**old**h]hold}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh), atomically updates }(hj-hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh to }(hj-hhhNhNubjz)}(h**new**h]hnew}(hj(.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh# with relaxed ordering. Otherwise, }(hj-hhhNhNubjz)}(h**v**h]hv}(hj:.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh is not modified, }(hj-hhhNhNubjz)}(h**old**h]hold}(hjL.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh$ is updated to the current value of }(hj-hhhNhNubjz)}(h**v**h]hv}(hj^.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh#, and relaxed ordering is provided.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj9)}(hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_relaxed() there.}(hjw.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh if the exchange occurred, }(hj.hhhNhNubjz)}(h **false**h]hfalse}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh otherwise.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_sub_and_test (C function)c.atomic_long_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8bool atomic_long_sub_and_test (long i, atomic_long_t *v)h]h)}(h7bool atomic_long_sub_and_test(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.hhhj.hMubh)}(hatomic_long_sub_and_testh]h)}(hatomic_long_sub_and_testh]hatomic_long_sub_and_test}(hj /hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj /ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj.hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj)/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%/ubj=)}(h h]h }(hj7/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%/ubh)}(hjh]hi}(hjE/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!/ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj`/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjb/modnameN classnameNjcjf)}ji]jl)}j_j/sbc.atomic_long_sub_and_testasbuh1hhjY/ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjY/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY/ubh)}(hjh]hv}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjY/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!/ubeh}(h]h ]h"]h$]h&]jj uh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhj.hMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhj.hMhj.hhubj )}(hhh]j9)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj:hNhNubjp)}(hXT**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hj0h]hlong i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj>0h]hatomic_long_t *v}(hj@0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj80ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjW0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjS0hMhjT0ubah}(h]h ]h"]h$]h&]uh1jhj80ubeh}(h]h ]h"]h$]h&]uh1jhjS0hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubj9)}(h**Description**h]jz)}(hjy0h]h Description}(hj{0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjw0ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj0hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh to (}(hj0hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh - }(hj0hhhNhNubjz)}(h**i**h]hi}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh) with full ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_sub_and_test() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_sub_and_test() there.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh if the resulting value of }(hj0hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh is zero, }(hj0hhhNhNubjz)}(h **false**h]hfalse}(hj#1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh otherwise.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_dec_and_test (C function)c.atomic_long_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0bool atomic_long_dec_and_test (atomic_long_t *v)h]h)}(h/bool atomic_long_dec_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hj\1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjX1hhhji1hMubh)}(hatomic_long_dec_and_testh]h)}(hatomic_long_dec_and_testh]hatomic_long_dec_and_test}(hj|1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjX1hhhji1hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj1modnameN classnameNjcjf)}ji]jl)}j_j~1sbc.atomic_long_dec_and_testasbuh1hhj1ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hjh]hv}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj1ubah}(h]h ]h"]h$]h&]jj uh1jhjX1hhhji1hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjT1hhhji1hMubah}(h]jO1ah ](jjeh"]h$]h&]jj)jhuh1hhji1hMhjQ1hhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jhjQ1hhhji1hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j2j4j2j5j6j7uh1hhhhj:hNhNubjp)}(hX+**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj!2h]h Parameters}(hj#2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj@2h]hatomic_long_t *v}(hjB2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:2ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjY2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjU2hMhjV2ubah}(h]h ]h"]h$]h&]uh1jhj:2ubeh}(h]h ]h"]h$]h&]uh1jhjU2hMhj72ubah}(h]h ]h"]h$]h&]uh1jhj2ubj9)}(h**Description**h]jz)}(hj{2h]h Description}(hj}2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjy2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh to (}(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh - 1) with full ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_dec_and_test() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_dec_and_test() there.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh if the resulting value of }(hj2hhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh is zero, }(hj2hhhNhNubjz)}(h **false**h]hfalse}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh otherwise.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_inc_and_test (C function)c.atomic_long_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0bool atomic_long_inc_and_test (atomic_long_t *v)h]h)}(h/bool atomic_long_inc_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hjL3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH3hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjZ3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjH3hhhjY3hMubh)}(hatomic_long_inc_and_testh]h)}(hatomic_long_inc_and_testh]hatomic_long_inc_and_test}(hjl3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjH3hhhjY3hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]jl)}j_jn3sbc.atomic_long_inc_and_testasbuh1hhj3ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj3ubah}(h]h ]h"]h$]h&]jj uh1jhjH3hhhjY3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjD3hhhjY3hMubah}(h]j?3ah ](jjeh"]h$]h&]jj)jhuh1hhjY3hMhjA3hhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjA3hhhjY3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhj:hNhNubjp)}(hX+**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_and_test() there. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj04h]hatomic_long_t *v}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj*4ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjE4hMhjF4ubah}(h]h ]h"]h$]h&]uh1jhj*4ubeh}(h]h ]h"]h$]h&]uh1jhjE4hMhj'4ubah}(h]h ]h"]h$]h&]uh1jhj 4ubj9)}(h**Description**h]jz)}(hjk4h]h Description}(hjm4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh to (}(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh + 1) with full ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_inc_and_test() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_inc_and_test() there.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubj9)}(h **Return**h]jz)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh if the resulting value of }(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh is zero, }(hj4hhhNhNubjz)}(h **false**h]hfalse}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh otherwise.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_add_negative (C function)c.atomic_long_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8bool atomic_long_add_negative (long i, atomic_long_t *v)h]h)}(h7bool atomic_long_add_negative(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj<5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj85hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjJ5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj85hhhjI5hMubh)}(hatomic_long_add_negativeh]h)}(hatomic_long_add_negativeh]hatomic_long_add_negative}(hj\5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjX5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj85hhhjI5hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjx5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjt5ubh)}(hjh]hi}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjp5ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jl)}j_j^5sbc.atomic_long_add_negativeasbuh1hhj5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hjh]hv}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjp5ubeh}(h]h ]h"]h$]h&]jj uh1jhj85hhhjI5hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj45hhhjI5hMubah}(h]j/5ah ](jjeh"]h$]h&]jj)jhuh1hhjI5hMhj15hhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj15hhhjI5hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j+6j4j+6j5j6j7uh1hhhhj:hNhNubjp)}(hXS**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj56h]h Parameters}(hj76hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj36ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjT6h]hlong i}(hjV6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjR6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjN6ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjm6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hji6hMhjj6ubah}(h]h ]h"]h$]h&]uh1jhjN6ubeh}(h]h ]h"]h$]h&]uh1jhji6hMhjK6ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj6h]hatomic_long_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj6ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjK6ubeh}(h]h ]h"]h$]h&]uh1jhj/6ubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh to (}(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh + }(hj6hhhNhNubjz)}(h**i**h]hi}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh) with full ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_add_negative() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_add_negative() there.}(hj#7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubj9)}(h **Return**h]jz)}(hj47h]hReturn}(hj67hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj27ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjN7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ7ubh if the resulting value of }(hjJ7hhhNhNubjz)}(h**v**h]hv}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ7ubh is negative, }(hjJ7hhhNhNubjz)}(h **false**h]hfalse}(hjr7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ7ubh otherwise.}(hjJ7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj/6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_acquire (C function)"c.atomic_long_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_acquire (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_acquire(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7hhhj7hMubh)}(h atomic_long_add_negative_acquireh]h)}(h atomic_long_add_negative_acquireh]h atomic_long_add_negative_acquire}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj7hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubh)}(hjh]hi}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj7ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj 8modnameN classnameNjcjf)}ji]jl)}j_j7sb"c.atomic_long_add_negative_acquireasbuh1hhj8ubj=)}(h h]h }(hj>8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hjh]h*}(hjL8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hjh]hv}(hjY8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj7ubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhj7hhubj )}(hhh]j9)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj:hNhNubjp)}(hX^**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative_acquire() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj8h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj8h]hatomic_long_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hj79h]h Description}(hj99hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj59ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjM9hhhNhNubjz)}(h**v**h]hv}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM9ubh to (}(hjM9hhhNhNubjz)}(h**v**h]hv}(hjg9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM9ubh + }(hjM9hhhNhNubjz)}(h**i**h]hi}(hjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM9ubh) with acquire ordering.}(hjM9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_acquire() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_acquire() there.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj9)}(h **Return**h]jz)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh if the resulting value of }(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh is negative, }(hj9hhhNhNubjz)}(h **false**h]hfalse}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh otherwise.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_release (C function)"c.atomic_long_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_release (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_release(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj(:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:hhhj':hMubh)}(h atomic_long_add_negative_releaseh]h)}(h atomic_long_add_negative_releaseh]h atomic_long_add_negative_release}(hj::hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj':hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjV:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR:ubj=)}(h h]h }(hjd:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR:ubh)}(hjh]hi}(hjr:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN:ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jl)}j_j<:sb"c.atomic_long_add_negative_releaseasbuh1hhj:ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hjh]hv}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjN:ubeh}(h]h ]h"]h$]h&]jj uh1jhj:hhhj':hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj':hMubah}(h]j :ah ](jjeh"]h$]h&]jj)jhuh1hhj':hMhj:hhubj )}(hhh]j9)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj':hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j ;j4j ;j5j6j7uh1hhhhj:hNhNubjp)}(hX^**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj2;h]hlong i}(hj4;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,;ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjG;hMhjH;ubah}(h]h ]h"]h$]h&]uh1jhj,;ubeh}(h]h ]h"]h$]h&]uh1jhjG;hMhj);ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjk;h]hatomic_long_t *v}(hjm;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hji;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhje;ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhje;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj);ubeh}(h]h ]h"]h$]h&]uh1jhj ;ubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh to (}(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh + }(hj;hhhNhNubjz)}(h**i**h]hi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh) with release ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj,<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(<ubh if the resulting value of }(hj(<hhhNhNubjz)}(h**v**h]hv}(hj><hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(<ubh is negative, }(hj(<hhhNhNubjz)}(h **false**h]hfalse}(hjP<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(<ubh otherwise.}(hj(<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-atomic_long_add_negative_relaxed (C function)"c.atomic_long_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_relaxed (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_relaxed(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<hhhj<hM ubh)}(h atomic_long_add_negative_relaxedh]h)}(h atomic_long_add_negative_relaxedh]h atomic_long_add_negative_relaxed}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhj<hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubh)}(hjh]hi}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_j<sb"c.atomic_long_add_negative_relaxedasbuh1hhj<ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubj)}(hjh]h*}(hj*=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hjh]hv}(hj7=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhj<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj<hM ubah}(h]j|<ah ](jjeh"]h$]h&]jj)jhuh1hhj<hM hj~<hhubj )}(hhh]j9)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj`=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj]=hhubah}(h]h ]h"]h$]h&]uh1jhj~<hhhj<hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jx=j4jx=j5j6j7uh1hhhhj:hNhNubjp)}(hX^**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|=ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj=h]hlong i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj=h]hatomic_long_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubeh}(h]h ]h"]h$]h&]uh1jhj|=ubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|=ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj+>hhhNhNubjz)}(h**v**h]hv}(hj3>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+>ubh to (}(hj+>hhhNhNubjz)}(h**v**h]hv}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+>ubh + }(hj+>hhhNhNubjz)}(h**i**h]hi}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+>ubh) with relaxed ordering.}(hj+>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|=ubj9)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there.}(hjp>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|=ubj9)}(h **Return**h]jz)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|=ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh if the resulting value of }(hj>hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh is negative, }(hj>hhhNhNubjz)}(h **false**h]hfalse}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh otherwise.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)atomic_long_fetch_add_unless (C function)c.atomic_long_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDlong atomic_long_fetch_add_unless (atomic_long_t *v, long a, long u)h]h)}(hClong atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)h](j)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhj?hMubh)}(hatomic_long_fetch_add_unlessh]h)}(hatomic_long_fetch_add_unlessh]hatomic_long_fetch_add_unless}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj?hMubj )}(h"(atomic_long_t *v, long a, long u)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj8?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:?modnameN classnameNjcjf)}ji]jl)}j_j?sbc.atomic_long_fetch_add_unlessasbuh1hhj1?ubj=)}(h h]h }(hjX?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1?ubj)}(hjh]h*}(hjf?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1?ubh)}(hjh]hv}(hjs?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-?ubj&)}(hlong ah](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(hj;h]ha}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-?ubj&)}(hlong uh](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(hj‰h]hu}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-?ubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhj?hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj?hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj?hMhj>hhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj?hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@j4j@j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long a`` long value to add ``long u`` long value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj&@h]h Parameters}(hj(@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj @ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjE@h]hatomic_long_t *v}(hjG@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?@ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj^@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZ@hMhj[@ubah}(h]h ]h"]h$]h&]uh1jhj?@ubeh}(h]h ]h"]h$]h&]uh1jhjZ@hMhj<@ubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j?)}(hj~@h]hlong a}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx@ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhjx@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj<@ubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j?)}(hj@h]hlong u}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj<@ubeh}(h]h ]h"]h$]h&]uh1jhj @ubj9)}(h**Description**h]jz)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj @ubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjAhhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh != }(hjAhhhNhNubjz)}(h**u**h]hu}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh), atomically updates }(hjAhhhNhNubjz)}(h**v**h]hv}(hj4AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh to (}(hjAhhhNhNubjz)}(h**v**h]hv}(hjFAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh + }(hjAhhhNhNubjz)}(h**a**h]ha}(hjXAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh!) with full ordering. Otherwise, }(hjAhhhNhNubjz)}(h**v**h]hv}(hjjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh2 is not modified and relaxed ordering is provided.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj @ubj9)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hj @ubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj @ubj9)}(hThe original value of **v**.h](hThe original value of }(hjAhhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj @ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#atomic_long_add_unless (C function)c.atomic_long_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>bool atomic_long_add_unless (atomic_long_t *v, long a, long u)h]h)}(h=bool atomic_long_add_unless(atomic_long_t *v, long a, long u)h](j)}(hjh]hbool}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjAhM1ubh)}(hatomic_long_add_unlessh]h)}(hatomic_long_add_unlessh]hatomic_long_add_unless}(hj BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjAhM1ubj )}(h"(atomic_long_t *v, long a, long u)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj*BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'Bubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,BmodnameN classnameNjcjf)}ji]jl)}j_j Bsbc.atomic_long_add_unlessasbuh1hhj#Bubj=)}(h h]h }(hjJBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#Bubj)}(hjh]h*}(hjXBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Bubh)}(hjh]hv}(hjeBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Bubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubj&)}(hlong ah](j)}(hlongh]hlong}(hj}BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyBubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyBubh)}(hj;h]ha}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubj&)}(hlong uh](j)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh)}(hj‰h]hu}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjBubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhjAhM1ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjAhhhjAhM1ubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1hhjAhM1hjAhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhM1ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long a`` long value to add ``long u`` long value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_add_unless() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjCubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj7Ch]hatomic_long_t *v}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5Cubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj1Cubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjPChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLChM2hjMCubah}(h]h ]h"]h$]h&]uh1jhj1Cubeh}(h]h ]h"]h$]h&]uh1jhjLChM2hj.Cubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j?)}(hjpCh]hlong a}(hjrChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjjCubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM3hjCubah}(h]h ]h"]h$]h&]uh1jhjjCubeh}(h]h ]h"]h$]h&]uh1jhjChM3hj.Cubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j?)}(hjCh]hlong u}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjCubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM4hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM4hj.Cubeh}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjCubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjChhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh != }(hjChhhNhNubjz)}(h**u**h]hu}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh), atomically updates }(hjChhhNhNubjz)}(h**v**h]hv}(hj&DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh to (}(hjChhhNhNubjz)}(h**v**h]hv}(hj8DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh + }(hjChhhNhNubjz)}(h**a**h]ha}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh!) with full ordering. Otherwise, }(hjChhhNhNubjz)}(h**v**h]hv}(hj\DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh2 is not modified and relaxed ordering is provided.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjCubj9)}(hFUnsafe to use in noinstr code; use raw_atomic_long_add_unless() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_add_unless() there.}(hjuDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjCubj9)}(h **Return**h]jz)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjCubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh if }(hjDhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh was updated, }(hjDhhhNhNubjz)}(h **false**h]hfalse}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh otherwise.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%atomic_long_inc_not_zero (C function)c.atomic_long_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0bool atomic_long_inc_not_zero (atomic_long_t *v)h]h)}(h/bool atomic_long_inc_not_zero(atomic_long_t *v)h](j)}(hjh]hbool}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFubj=)}(h h]h }(hj EhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDhhhj EhMFubh)}(hatomic_long_inc_not_zeroh]h)}(hatomic_long_inc_not_zeroh]hatomic_long_inc_not_zero}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhj EhMFubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjEmodnameN classnameNjcjf)}ji]jl)}j_jEsbc.atomic_long_inc_not_zeroasbuh1hhj5Eubj=)}(h h]h }(hj\EhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5Eubj)}(hjh]h*}(hjjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Eubh)}(hjh]hv}(hjwEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Eubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj1Eubah}(h]h ]h"]h$]h&]jj uh1jhjDhhhj EhMFubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhj EhMFubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhj EhMFhjDhhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj EhMFubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj:hNhNubjp)}(hXl**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjEubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjEh]hatomic_long_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjEubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMGhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMGhjEubah}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjEubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj2FhhhNhNubjz)}(h**v**h]hv}(hj:FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2Fubh != 0), atomically updates }(hj2FhhhNhNubjz)}(h**v**h]hv}(hjLFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2Fubh to (}(hj2FhhhNhNubjz)}(h**v**h]hv}(hj^FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2Fubh% + 1) with full ordering. Otherwise, }(hj2FhhhNhNubjz)}(h**v**h]hv}(hjpFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2Fubh2 is not modified and relaxed ordering is provided.}(hj2FhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjEubj9)}(hHUnsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjEubj9)}(h **Return**h]jz)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjEubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh if }(hjFhhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh was updated, }(hjFhhhNhNubjz)}(h **false**h]hfalse}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh otherwise.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_inc_unless_negative (C function)!c.atomic_long_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h7bool atomic_long_inc_unless_negative (atomic_long_t *v)h]h)}(h6bool atomic_long_inc_unless_negative(atomic_long_t *v)h](j)}(hjh]hbool}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Ghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj GhhhjGhMYubh)}(hatomic_long_inc_unless_negativeh]h)}(hatomic_long_inc_unless_negativeh]hatomic_long_inc_unless_negative}(hj1GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Gubah}(h]h ](jjeh"]h$]h&]jj uh1hhj GhhhjGhMYubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjPGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMGubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjRGmodnameN classnameNjcjf)}ji]jl)}j_j3Gsb!c.atomic_long_inc_unless_negativeasbuh1hhjIGubj=)}(h h]h }(hjpGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIGubj)}(hjh]h*}(hj~GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIGubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIGubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEGubah}(h]h ]h"]h$]h&]jj uh1jhj GhhhjGhMYubeh}(h]h ]h"]h$]h&]jj juh1hjjhj GhhhjGhMYubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjGhMYhjGhhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjGhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMYubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jGj4jGj5j6j7uh1hhhhj:hNhNubjp)}(hXs**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjGubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjGh]hatomic_long_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhjGubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj HhMZhj Hubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj HhMZhjGubah}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hj0Hh]h Description}(hj2HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.Hubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjGubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjFHhhhNhNubjz)}(h**v**h]hv}(hjNHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFHubh >= 0), atomically updates }(hjFHhhhNhNubjz)}(h**v**h]hv}(hj`HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFHubh to (}(hjFHhhhNhNubjz)}(h**v**h]hv}(hjrHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFHubh% + 1) with full ordering. Otherwise, }(hjFHhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFHubh2 is not modified and relaxed ordering is provided.}(hjFHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjGubj9)}(hOUnsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjGubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjGubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh if }(hjHhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh was updated, }(hjHhhhNhNubjz)}(h **false**h]hfalse}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh otherwise.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,atomic_long_dec_unless_positive (C function)!c.atomic_long_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h7bool atomic_long_dec_unless_positive (atomic_long_t *v)h]h)}(h6bool atomic_long_dec_unless_positive(atomic_long_t *v)h](j)}(hjh]hbool}(hj%IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubj=)}(h h]h }(hj3IhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!Ihhhj2IhMlubh)}(hatomic_long_dec_unless_positiveh]h)}(hatomic_long_dec_unless_positiveh]hatomic_long_dec_unless_positive}(hjEIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAIubah}(h]h ](jjeh"]h$]h&]jj uh1hhj!Ihhhj2IhMlubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjdIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjfImodnameN classnameNjcjf)}ji]jl)}j_jGIsb!c.atomic_long_dec_unless_positiveasbuh1hhj]Iubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]Iubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Iubh)}(hjh]hv}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Iubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYIubah}(h]h ]h"]h$]h&]jj uh1jhj!Ihhhj2IhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhj2IhMlubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhj2IhMlhjIhhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjIhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj2IhMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj:hNhNubjp)}(hXs**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_dec_unless_positive() there. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjIubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj Jh]hatomic_long_t *v}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjJubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"JhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMmhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMmhjJubah}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjDJh]h Description}(hjFJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohjIubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjZJhhhNhNubjz)}(h**v**h]hv}(hjbJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZJubh <= 0), atomically updates }(hjZJhhhNhNubjz)}(h**v**h]hv}(hjtJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZJubh to (}(hjZJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZJubh% - 1) with full ordering. Otherwise, }(hjZJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZJubh2 is not modified and relaxed ordering is provided.}(hjZJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjIubj9)}(hOUnsafe to use in noinstr code; use raw_atomic_long_dec_unless_positive() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_dec_unless_positive() there.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjIubj9)}(h **Return**h]jz)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshjIubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh if }(hjJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh was updated, }(hjJhhhNhNubjz)}(h **false**h]hfalse}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh otherwise.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(atomic_long_dec_if_positive (C function)c.atomic_long_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3long atomic_long_dec_if_positive (atomic_long_t *v)h]h)}(h2long atomic_long_dec_if_positive(atomic_long_t *v)h](j)}(hlongh]hlong}(hj9KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Khhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubj=)}(h h]h }(hjHKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5KhhhjGKhMubh)}(hatomic_long_dec_if_positiveh]h)}(hatomic_long_dec_if_positiveh]hatomic_long_dec_if_positive}(hjZKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVKubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5KhhhjGKhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjyKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvKubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj{KmodnameN classnameNjcjf)}ji]jl)}j_j\Ksbc.atomic_long_dec_if_positiveasbuh1hhjrKubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrKubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrKubh)}(hjh]hv}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnKubah}(h]h ]h"]h$]h&]jj uh1jhj5KhhhjGKhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1KhhhjGKhMubah}(h]j,Kah ](jjeh"]h$]h&]jj)jhuh1hhjGKhMhj.Khhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhj.KhhhjGKhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjLh]hatomic_long_t *v}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj7LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3LhMhj4Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj3LhMhjLubah}(h]h ]h"]h$]h&]uh1jhjKubj9)}(h**Description**h]jz)}(hjYLh]h Description}(hj[LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWLubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjoLhhhNhNubjz)}(h**v**h]hv}(hjwLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoLubh > 0), atomically updates }(hjoLhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoLubh to (}(hjoLhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoLubh% - 1) with full ordering. Otherwise, }(hjoLhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoLubh2 is not modified and relaxed ordering is provided.}(hjoLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj9)}(hKUnsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_dec_if_positive() there.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj9)}(h **Return**h]jz)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjLhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh - 1), regardless of whether }(hjLhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubh was updated.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_read (C function)c.raw_atomic_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'int raw_atomic_read (const atomic_t *v)h]h)}(h&int raw_atomic_read(const atomic_t *v)h](j)}(hinth]hint}(hj@MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhj>Nubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:Nubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjYNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUNhMhjVNubah}(h]h ]h"]h$]h&]uh1jhj:Nubeh}(h]h ]h"]h$]h&]uh1jhjUNhMhj7Nubah}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hj{Nh]h Description}(hj}NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjNhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh with relaxed ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(hhjPubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjPubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj3PhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/PhMhj0Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj/PhMhjPubah}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjUPh]h Description}(hjWPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSPubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjkPhhhNhNubjz)}(h**v**h]hv}(hjsPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkPubh with acquire ordering.}(hjkPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj9)}(hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj9)}(h **Return**h]jz)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjPhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_set (C function)c.raw_atomic_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void raw_atomic_set (atomic_t *v, int i)h]h)}(h'void raw_atomic_set(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPhhhjQhMubh)}(hraw_atomic_seth]h)}(hraw_atomic_seth]hraw_atomic_set}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjQhMubj )}(h(atomic_t *v, int i)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj4QhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1Qubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj6QmodnameN classnameNjcjf)}ji]jl)}j_jQsbc.raw_atomic_setasbuh1hhj-Qubj=)}(h h]h }(hjTQhhhNhNubah}(h]h ]jIa.h"]h$]h&]uh1j<hj-Qubj)}(hjh]h*}(hjbQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Qubh)}(hjh]hv}(hjoQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-Qubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)Qubj&)}(hint ih](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh)}(hjh]hi}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj)Qubeh}(h]h ]h"]h$]h&]jj uh1jhjPhhhjQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPhhhjQhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1hhjQhMhjPhhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjQhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Safe to use in noinstr code; prefer atomic_set() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj Rh]h atomic_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Rubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjRubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj&RhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"RhMhj#Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhj"RhMhjRubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j?)}(hjFRh]hint i}(hjHRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDRubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Rubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj_RhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[RhMhj\Rubah}(h]h ]h"]h$]h&]uh1jhj@Rubeh}(h]h ]h"]h$]h&]uh1jhj[RhMhjRubeh}(h]h ]h"]h$]h&]uh1jhjQubj9)}(h**Description**h]jz)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjRhhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh to }(hjRhhhNhNubjz)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh with relaxed ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj9)}(h;Safe to use in noinstr code; prefer atomic_set() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_set() elsewhere.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj9)}(h **Return**h]jz)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj9)}(hNothing.h]hNothing.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic_set_release (C function)c.raw_atomic_set_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0void raw_atomic_set_release (atomic_t *v, int i)h]h)}(h/void raw_atomic_set_release(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hj ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj/ShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhj.ShMubh)}(hraw_atomic_set_releaseh]h)}(hraw_atomic_set_releaseh]hraw_atomic_set_release}(hjAShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=Subah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhj.ShMubj )}(h(atomic_t *v, int i)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj`ShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]Subah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjbSmodnameN classnameNjcjf)}ji]jl)}j_jCSsbc.raw_atomic_set_releaseasbuh1hhjYSubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYSubh)}(hjh]hv}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUSubj&)}(hint ih](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hjh]hi}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUSubeh}(h]h ]h"]h$]h&]jj uh1jhjShhhj.ShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhj.ShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhj.ShMhjShhubj )}(hhh]j9)}(h atomic set with release orderingh]h atomic set with release ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjShhubah}(h]h ]h"]h$]h&]uh1jhjShhhj.ShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jTj4jTj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t ``int i`` int value to assign **Description** Atomically sets **v** to **i** with release ordering. Safe to use in noinstr code; prefer atomic_set_release() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj9Th]h atomic_t *v}(hj;ThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7Tubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3Tubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjRThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNThMhjOTubah}(h]h ]h"]h$]h&]uh1jhj3Tubeh}(h]h ]h"]h$]h&]uh1jhjNThMhj0Tubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]j?)}(hjrTh]hint i}(hjtThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpTubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlTubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjlTubeh}(h]h ]h"]h$]h&]uh1jhjThMhj0Tubeh}(h]h ]h"]h$]h&]uh1jhjTubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjThhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh to }(hjThhhNhNubjz)}(h**i**h]hi}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh with release ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(h **Return**h]jz)}(hjUh]hReturn}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(hNothing.h]hNothing.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_add (C function)c.raw_atomic_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void raw_atomic_add (int i, atomic_t *v)h]h)}(h'void raw_atomic_add(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjLUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHUhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj[UhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHUhhhjZUhMubh)}(hraw_atomic_addh]h)}(hraw_atomic_addh]hraw_atomic_add}(hjmUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjHUhhhjZUhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hjh]hi}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_joUsbc.raw_atomic_addasbuh1hhjUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hjh]hv}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubeh}(h]h ]h"]h$]h&]jj uh1jhjHUhhhjZUhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDUhhhjZUhMubah}(h]j?Uah ](jjeh"]h$]h&]jj)jhuh1hhjZUhMhjAUhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj$VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj!Vhhubah}(h]h ]h"]h$]h&]uh1jhjAUhhhjZUhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhjcVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_Vubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj~VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzVhMhj{Vubah}(h]h ]h"]h$]h&]uh1jhj_Vubeh}(h]h ]h"]h$]h&]uh1jhjzVhMhj\Vubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjVh]h atomic_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj\Vubeh}(h]h ]h"]h$]h&]uh1jhj@Vubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Vubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh to (}(hjVhhhNhNubjz)}(h**v**h]hv}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh + }(hjVhhhNhNubjz)}(h**i**h]hi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Vubj9)}(h;Safe to use in noinstr code; prefer atomic_add() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_add() elsewhere.}(hj4WhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Vubj9)}(h **Return**h]jz)}(hjEWh]hReturn}(hjGWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCWubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Vubj9)}(hNothing.h]hNothing.}(hj[WhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@Vubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_add_return (C function)c.raw_atomic_add_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_add_return (int i, atomic_t *v)h]h)}(h-int raw_atomic_add_return(int i, atomic_t *v)h](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&ubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWhhhjWhM&ubh)}(hraw_atomic_add_returnh]h)}(hraw_atomic_add_returnh]hraw_atomic_add_return}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjWhM&ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubh)}(hjh]hi}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjXmodnameN classnameNjcjf)}ji]jl)}j_jWsbc.raw_atomic_add_returnasbuh1hhjWubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubj)}(hjh]h*}(hj,XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hjh]hv}(hj9XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWubeh}(h]h ]h"]h$]h&]jj uh1jhjWhhhjWhM&ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjWhhhjWhM&ubah}(h]j}Wah ](jjeh"]h$]h&]jj)jhuh1hhjWhM&hjWhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjbXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hj_Xhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhM&ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jzXj4jzXj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_add_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj~Xubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjXh]hint i}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjXubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhM'hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhM'hjXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjXh]h atomic_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjXubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhM(hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhM(hjXubeh}(h]h ]h"]h$]h&]uh1jhj~Xubj9)}(h**Description**h]jz)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj~Xubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj-YhhhNhNubjz)}(h**v**h]hv}(hj5YhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Yubh to (}(hj-YhhhNhNubjz)}(h**v**h]hv}(hjGYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Yubh + }(hj-YhhhNhNubjz)}(h**i**h]hi}(hjYYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Yubh) with full ordering.}(hj-YhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hj~Xubj9)}(hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.}(hjrYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hj~Xubj9)}(h **Return**h]jz)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hj~Xubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjYhhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hj~Xubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_add_return_acquire (C function)c.raw_atomic_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYhhhjYhMAubh)}(hraw_atomic_add_return_acquireh]h)}(hraw_atomic_add_return_acquireh]hraw_atomic_add_return_acquire}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhjYhhhjYhMAubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj=)}(h h]h }(hj%ZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZubh)}(hjh]hi}(hj3ZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjNZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPZmodnameN classnameNjcjf)}ji]jl)}j_jYsbc.raw_atomic_add_return_acquireasbuh1hhjGZubj=)}(h h]h }(hjnZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGZubj)}(hjh]h*}(hj|ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGZubh)}(hjh]hv}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGZubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZubeh}(h]h ]h"]h$]h&]jj uh1jhjYhhhjYhMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjYhMAubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1hhjYhMAhjYhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZj4jZj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjZubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjZh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjZubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjZubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMBhj [ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMBhjZubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj,[h]h atomic_t *v}(hj.[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*[ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChj&[ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjE[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjA[hMChjB[ubah}(h]h ]h"]h$]h&]uh1jhj&[ubeh}(h]h ]h"]h$]h&]uh1jhjA[hMChjZubeh}(h]h ]h"]h$]h&]uh1jhjZubj9)}(h**Description**h]jz)}(hjg[h]h Description}(hji[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjZubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj}[hhhNhNubjz)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}[ubh to (}(hj}[hhhNhNubjz)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}[ubh + }(hj}[hhhNhNubjz)}(h**i**h]hi}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}[ubh) with acquire ordering.}(hj}[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjZubj9)}(hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjZubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMHhjZubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj[hhhNhNubjz)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_add_return_release (C function)c.raw_atomic_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_release (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj*\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&\hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ubj=)}(h h]h }(hj9\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&\hhhj8\hM\ubh)}(hraw_atomic_add_return_releaseh]h)}(hraw_atomic_add_return_releaseh]hraw_atomic_add_return_release}(hjK\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&\hhhj8\hM\ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjg\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc\ubj=)}(h h]h }(hju\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjc\ubh)}(hjh]hi}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjc\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj_\ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jl)}j_jM\sbc.raw_atomic_add_return_releaseasbuh1hhj\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hjh]hv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj_\ubeh}(h]h ]h"]h$]h&]jj uh1jhj&\hhhj8\hM\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj"\hhhj8\hM\ubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhj8\hM\hj\hhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hj\hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj8\hM\ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_add_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj$]h]h Parameters}(hj&]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"]ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM`hj]ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjC]h]hint i}(hjE]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hj=]ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj\]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX]hM]hjY]ubah}(h]h ]h"]h$]h&]uh1jhj=]ubeh}(h]h ]h"]h$]h&]uh1jhjX]hM]hj:]ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj|]h]h atomic_t *v}(hj~]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjz]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjv]ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hM^hj]ubah}(h]h ]h"]h$]h&]uh1jhjv]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM^hj:]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM`hj]ubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh to (}(hj]hhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh + }(hj]hhhNhNubjz)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubh) with release ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hj]ubj9)}(hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahj]ubj9)}(h **Return**h]jz)}(hj#^h]hReturn}(hj%^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!^ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchj]ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj9^hhhNhNubjz)}(h**v**h]hv}(hjA^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9^ubh.}(hj9^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_add_return_relaxed (C function)c.raw_atomic_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_relaxed (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjz^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjv^hhhj^hMvubh)}(hraw_atomic_add_return_relaxedh]h)}(hraw_atomic_add_return_relaxedh]hraw_atomic_add_return_relaxed}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjv^hhhj^hMvubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubh)}(hjh]hi}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]jl)}j_j^sbc.raw_atomic_add_return_relaxedasbuh1hhj^ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hjh]hv}(hj)_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhjv^hhhj^hMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjr^hhhj^hMvubah}(h]jm^ah ](jjeh"]h$]h&]jj)jhuh1hhj^hMvhjo^hhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjR_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhjO_hhubah}(h]h ]h"]h$]h&]uh1jhjo^hhhj^hMvubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj_j4jj_j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjt_h]h Parameters}(hjv_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr_ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjn_ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hj_h]hint i}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhj_ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMwhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMwhj_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj_h]h atomic_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhj_ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMxhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMxhj_ubeh}(h]h ]h"]h$]h&]uh1jhjn_ubj9)}(h**Description**h]jz)}(hj`h]h Description}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjn_ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj`hhhNhNubjz)}(h**v**h]hv}(hj%`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh to (}(hj`hhhNhNubjz)}(h**v**h]hv}(hj7`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh + }(hj`hhhNhNubjz)}(h**i**h]hi}(hjI`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh) with relaxed ordering.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMyhjn_ubj9)}(hJSafe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere.}(hjb`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjn_ubj9)}(h **Return**h]jz)}(hjs`h]hReturn}(hju`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hjn_ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjn_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_add (C function)c.raw_atomic_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_add (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_add(int i, atomic_t *v)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhj`hMubh)}(hraw_atomic_fetch_addh]h)}(hraw_atomic_fetch_addh]hraw_atomic_fetch_add}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhj`hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubh)}(hjh]hi}(hj#ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj>ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;aubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj@amodnameN classnameNjcjf)}ji]jl)}j_j`sbc.raw_atomic_fetch_addasbuh1hhj7aubj=)}(h h]h }(hj^ahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7aubj)}(hjh]h*}(hjlahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7aubh)}(hjh]hv}(hjyahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7aubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj`hhhj`hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj`hMhj`hhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_add() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjah]hint i}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjaubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjbh]h atomic_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj5bhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1bhMhj2bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj1bhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hjWbh]h Description}(hjYbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUbubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjmbhhhNhNubjz)}(h**v**h]hv}(hjubhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmbubh to (}(hjmbhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmbubh + }(hjmbhhhNhNubjz)}(h**i**h]hi}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmbubh) with full ordering.}(hjmbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_add() elsewhere.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj9)}(h **Return**h]jz)}(hjbh]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj9)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_add_acquire (C function)c.raw_atomic_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_add_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_add_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj)chhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjchhhj(chMubh)}(hraw_atomic_fetch_add_acquireh]h)}(hraw_atomic_fetch_add_acquireh]hraw_atomic_fetch_add_acquire}(hj;chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7cubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhj(chMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjWchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjScubj=)}(h h]h }(hjechhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjScubh)}(hjh]hi}(hjschhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjScubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOcubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjcmodnameN classnameNjcjf)}ji]jl)}j_j=csbc.raw_atomic_fetch_add_acquireasbuh1hhjcubj=)}(h h]h }(hjchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hjh]hv}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOcubeh}(h]h ]h"]h$]h&]jj uh1jhjchhhj(chMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhj(chMubah}(h]j cah ](jjeh"]h$]h&]jj)jhuh1hhj(chMhjchhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhjchhhj(chMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j dj4j dj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_add_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hj3dh]hint i}(hj5dhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1dubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-dubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjLdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHdhMhjIdubah}(h]h ]h"]h$]h&]uh1jhj-dubeh}(h]h ]h"]h$]h&]uh1jhjHdhMhj*dubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjldh]h atomic_t *v}(hjndhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjdubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfdubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjfdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj*dubeh}(h]h ]h"]h$]h&]uh1jhjdubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjdhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh to (}(hjdhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh + }(hjdhhhNhNubjz)}(h**i**h]hi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh) with acquire ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_add_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_acquire() elsewhere.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj9)}(h **Return**h]jz)}(hjeh]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubj9)}(hThe original value of **v**.h](hThe original value of }(hj)ehhhNhNubjz)}(h**v**h]hv}(hj1ehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)eubh.}(hj)ehhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_add_release (C function)c.raw_atomic_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_add_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_add_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjyehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfehhhjxehMubh)}(hraw_atomic_fetch_add_releaseh]h)}(hraw_atomic_fetch_add_releaseh]hraw_atomic_fetch_add_release}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfehhhjxehMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubh)}(hjh]hi}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_jesbc.raw_atomic_fetch_add_releaseasbuh1hhjeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubj)}(hjh]h*}(hj fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hjh]hv}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhjfehhhjxehMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbehhhjxehMubah}(h]j]eah ](jjeh"]h$]h&]jj)jhuh1hhjxehMhj_ehhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjBfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?fhhubah}(h]h ]h"]h$]h&]uh1jhj_ehhhjxehMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jZfj4jZfj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjdfh]h Parameters}(hjffhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbfubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjfh]hint i}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}fubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhj}fubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjzfubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjfh]h atomic_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjzfubeh}(h]h ]h"]h$]h&]uh1jhj^fubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj ghhhNhNubjz)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj gubh to (}(hj ghhhNhNubjz)}(h**v**h]hv}(hj'ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj gubh + }(hj ghhhNhNubjz)}(h**i**h]hi}(hj9ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj gubh) with release ordering.}(hj ghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_release() elsewhere.}(hjRghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubj9)}(h **Return**h]jz)}(hjcgh]hReturn}(hjeghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjagubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubj9)}(hThe original value of **v**.h](hThe original value of }(hjyghhhNhNubjz)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjygubh.}(hjyghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_add_relaxed (C function)c.raw_atomic_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_add_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_add_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjghhhjghMubh)}(hraw_atomic_fetch_add_relaxedh]h)}(hraw_atomic_fetch_add_relaxedh]hraw_atomic_fetch_add_relaxed}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubh)}(hjh]hi}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj.hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+hubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj0hmodnameN classnameNjcjf)}ji]jl)}j_jgsbc.raw_atomic_fetch_add_relaxedasbuh1hhj'hubj=)}(h h]h }(hjNhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hubj)}(hjh]h*}(hj\hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hubh)}(hjh]hv}(hjihhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'hubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjghhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhj4jhj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjhh]hint i}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj ih]h atomic_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj iubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj%ihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!ihMhj"iubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj!ihMhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hjGih]h Description}(hjIihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEiubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj]ihhhNhNubjz)}(h**v**h]hv}(hjeihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]iubh to (}(hj]ihhhNhNubjz)}(h**v**h]hv}(hjwihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]iubh + }(hj]ihhhNhNubjz)}(h**i**h]hi}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]iubh) with relaxed ordering.}(hj]ihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_add_relaxed() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hThe original value of **v**.h](hThe original value of }(hjihhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_sub (C function)c.raw_atomic_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void raw_atomic_sub (int i, atomic_t *v)h]h)}(h'void raw_atomic_sub(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjhhhjjhMubh)}(hraw_atomic_subh]h)}(hraw_atomic_subh]hraw_atomic_sub}(hj+jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'jubah}(h]h ](jjeh"]h$]h&]jj uh1hhjjhhhjjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjGjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCjubj=)}(h h]h }(hjUjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCjubh)}(hjh]hi}(hjcjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?jubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj~jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{jubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]jl)}j_j-jsbc.raw_atomic_subasbuh1hhjwjubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubh)}(hjh]hv}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?jubeh}(h]h ]h"]h$]h&]jj uh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjjhMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhjjhMhjihhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_sub() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj#kh]hint i}(hj%khhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!kubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjhjZkubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjVkubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjukhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqkhMhjrkubah}(h]h ]h"]h$]h&]uh1jhjVkubeh}(h]h ]h"]h$]h&]uh1jhjqkhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjjubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh to (}(hjkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh - }(hjkhhhNhNubjz)}(h**i**h]hi}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh) with relaxed ordering.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj9)}(h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_sub() elsewhere.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj9)}(h **Return**h]jz)}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj9)}(hNothing.h]hNothing.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_sub_return (C function)c.raw_atomic_sub_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_sub_return (int i, atomic_t *v)h]h)}(h-int raw_atomic_sub_return(int i, atomic_t *v)h](j)}(hinth]hint}(hjHlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDlhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjWlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDlhhhjVlhMubh)}(hraw_atomic_sub_returnh]h)}(hraw_atomic_sub_returnh]hraw_atomic_sub_return}(hjilhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjelubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDlhhhjVlhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubh)}(hjh]hi}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj}lubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjlmodnameN classnameNjcjf)}ji]jl)}j_jklsbc.raw_atomic_sub_returnasbuh1hhjlubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hjh]hv}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj}lubeh}(h]h ]h"]h$]h&]jj uh1jhjDlhhhjVlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@lhhhjVlhMubah}(h]j;lah ](jjeh"]h$]h&]jj)jhuh1hhjVlhMhj=lhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjmhhubah}(h]h ]h"]h$]h&]uh1jhj=lhhhjVlhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8mj4j8mj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_sub_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjBmh]h Parameters}(hjDmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@mubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhj_mubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj[mubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjzmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvmhMhjwmubah}(h]h ]h"]h$]h&]uh1jhj[mubeh}(h]h ]h"]h$]h&]uh1jhjvmhMhjXmubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjmh]h atomic_t *v}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjmubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjXmubeh}(h]h ]h"]h$]h&]uh1jhjhjoubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjoubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohM!hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM!hjoubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjoh]h atomic_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjoubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohM"hjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM"hjoubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hj%ph]h Description}(hj'phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#pubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjoubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj;phhhNhNubjz)}(h**v**h]hv}(hjCphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;pubh to (}(hj;phhhNhNubjz)}(h**v**h]hv}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;pubh - }(hj;phhhNhNubjz)}(h**i**h]hi}(hjgphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;pubh) with acquire ordering.}(hj;phhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjoubj9)}(hJSafe to use in noinstr code; prefer atomic_sub_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_sub_return_acquire() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjoubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjoubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjphhhNhNubjz)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_sub_return_release (C function)c.raw_atomic_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_sub_return_release (int i, atomic_t *v)h]h)}(h5int raw_atomic_sub_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjphhhjphM;ubh)}(hraw_atomic_sub_return_releaseh]h)}(hraw_atomic_sub_return_releaseh]hraw_atomic_sub_return_release}(hj qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjphM;ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj%qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!qubj=)}(h h]h }(hj3qhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!qubh)}(hjh]hi}(hjAqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!qubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj\qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^qmodnameN classnameNjcjf)}ji]jl)}j_j qsbc.raw_atomic_sub_return_releaseasbuh1hhjUqubj=)}(h h]h }(hj|qhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUqubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUqubh)}(hjh]hv}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjphM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjphhhjphM;ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjphM;hjphhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_sub_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjqubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjrh]hint i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjqubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhM<hjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhM<hjqubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj:rh]h atomic_t *v}(hjhj8rubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hj4rubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjSrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOrhM=hjPrubah}(h]h ]h"]h$]h&]uh1jhj4rubeh}(h]h ]h"]h$]h&]uh1jhjOrhM=hjqubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjurh]h Description}(hjwrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjqubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh to (}(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh - }(hjrhhhNhNubjz)}(h**i**h]hi}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh) with release ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjqubj9)}(hJSafe to use in noinstr code; prefer atomic_sub_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_sub_return_release() elsewhere.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjqubj9)}(h **Return**h]jz)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjqubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_sub_return_relaxed (C function)c.raw_atomic_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_sub_return_relaxed (int i, atomic_t *v)h]h)}(h5int raw_atomic_sub_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj8shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4shhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUubj=)}(h h]h }(hjGshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4shhhjFshMUubh)}(hraw_atomic_sub_return_relaxedh]h)}(hraw_atomic_sub_return_relaxedh]hraw_atomic_sub_return_relaxed}(hjYshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUsubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4shhhjFshMUubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjushhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqsubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqsubh)}(hjh]hi}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmsubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjsmodnameN classnameNjcjf)}ji]jl)}j_j[ssbc.raw_atomic_sub_return_relaxedasbuh1hhjsubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hjh]hv}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmsubeh}(h]h ]h"]h$]h&]jj uh1jhj4shhhjFshMUubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0shhhjFshMUubah}(h]j+sah ](jjeh"]h$]h&]jj)jhuh1hhjFshMUhj-shhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhj thhubah}(h]h ]h"]h$]h&]uh1jhj-shhhjFshMUubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(tj4j(tj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_sub_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj2th]h Parameters}(hj4thhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0tubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhj,tubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjQth]hint i}(hjSthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOtubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjKtubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfthMVhjgtubah}(h]h ]h"]h$]h&]uh1jhjKtubeh}(h]h ]h"]h$]h&]uh1jhjfthMVhjHtubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjth]h atomic_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjtubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMWhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMWhjHtubeh}(h]h ]h"]h$]h&]uh1jhj,tubj9)}(h**Description**h]jz)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhj,tubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjthhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh to (}(hjthhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh - }(hjthhhNhNubjz)}(h**i**h]hi}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh) with relaxed ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhj,tubj9)}(hJSafe to use in noinstr code; prefer atomic_sub_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_sub_return_relaxed() elsewhere.}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhj,tubj9)}(h **Return**h]jz)}(hj1uh]hReturn}(hj3uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/uubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hj,tubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjGuhhhNhNubjz)}(h**v**h]hv}(hjOuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGuubh.}(hjGuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hj,tubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_sub (C function)c.raw_atomic_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_sub (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_sub(int i, atomic_t *v)h](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuhhhjuhMlubh)}(hraw_atomic_fetch_subh]h)}(hraw_atomic_fetch_subh]hraw_atomic_fetch_sub}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjuhhhjuhMlubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubh)}(hjh]hi}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjumodnameN classnameNjcjf)}ji]jl)}j_jusbc.raw_atomic_fetch_subasbuh1hhjuubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjuubj)}(hjh]h*}(hj*vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hjh]hv}(hj7vhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubeh}(h]h ]h"]h$]h&]jj uh1jhjuhhhjuhMlubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjuhMlubah}(h]j{uah ](jjeh"]h$]h&]jj)jhuh1hhjuhMlhj}uhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj`vhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhj]vhhubah}(h]h ]h"]h$]h&]uh1jhj}uhhhjuhMlubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxvj4jxvj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_sub() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj|vubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjvh]hint i}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjvubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMmhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMmhjvubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjvh]h atomic_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjvubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMnhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMnhjvubeh}(h]h ]h"]h$]h&]uh1jhj|vubj9)}(h**Description**h]jz)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj|vubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj+whhhNhNubjz)}(h**v**h]hv}(hj3whhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+wubh to (}(hj+whhhNhNubjz)}(h**v**h]hv}(hjEwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+wubh - }(hj+whhhNhNubjz)}(h**i**h]hi}(hjWwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+wubh) with full ordering.}(hj+whhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohj|vubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.}(hjpwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj|vubj9)}(h **Return**h]jz)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMshj|vubj9)}(hThe original value of **v**.h](hThe original value of }(hjwhhhNhNubjz)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj|vubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_acquire (C function)c.raw_atomic_fetch_sub_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_sub_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_sub_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwhhhjwhMubh)}(hraw_atomic_fetch_sub_acquireh]h)}(hraw_atomic_fetch_sub_acquireh]hraw_atomic_fetch_sub_acquire}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwhhhjwhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj=)}(h h]h }(hj#xhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxubh)}(hjh]hi}(hj1xhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj xubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjLxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIxubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNxmodnameN classnameNjcjf)}ji]jl)}j_jwsbc.raw_atomic_fetch_sub_acquireasbuh1hhjExubj=)}(h h]h }(hjlxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjExubj)}(hjh]h*}(hjzxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjExubh)}(hjh]hv}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjExubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj xubeh}(h]h ]h"]h$]h&]jj uh1jhjwhhhjwhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjwhMubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjwhMhjwhhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_sub_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjxh]hint i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjxubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj*yh]h atomic_t *v}(hj,yhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(yubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$yubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjCyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?yhMhj@yubah}(h]h ]h"]h$]h&]uh1jhj$yubeh}(h]h ]h"]h$]h&]uh1jhj?yhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjeyh]h Description}(hjgyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcyubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj{yhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{yubh to (}(hj{yhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{yubh - }(hj{yhhhNhNubjz)}(h**i**h]hi}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{yubh) with acquire ordering.}(hj{yhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_sub_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_sub_acquire() elsewhere.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(h **Return**h]jz)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hThe original value of **v**.h](hThe original value of }(hjyhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_release (C function)c.raw_atomic_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_sub_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_sub_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj(zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$zhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj7zhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$zhhhj6zhMubh)}(hraw_atomic_fetch_sub_releaseh]h)}(hraw_atomic_fetch_sub_releaseh]hraw_atomic_fetch_sub_release}(hjIzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEzubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$zhhhj6zhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjezhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjazubj=)}(h h]h }(hjszhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjazubh)}(hjh]hi}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjazubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]zubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzmodnameN classnameNjcjf)}ji]jl)}j_jKzsbc.raw_atomic_fetch_sub_releaseasbuh1hhjzubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hjh]hv}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj]zubeh}(h]h ]h"]h$]h&]jj uh1jhj$zhhhj6zhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj zhhhj6zhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhj6zhMhjzhhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhj6zhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj"{h]h Parameters}(hj${hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj {ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjA{h]hint i}(hjC{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?{ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj;{ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjZ{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjV{hMhjW{ubah}(h]h ]h"]h$]h&]uh1jhj;{ubeh}(h]h ]h"]h$]h&]uh1jhjV{hMhj8{ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjz{h]h atomic_t *v}(hj|{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjx{ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjt{ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhjt{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj8{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh to (}(hj{hhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh - }(hj{hhhNhNubjz)}(h**i**h]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh) with release ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_sub_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_sub_release() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj9)}(h **Return**h]jz)}(hj!|h]hReturn}(hj#|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj9)}(hThe original value of **v**.h](hThe original value of }(hj7|hhhNhNubjz)}(h**v**h]hv}(hj?|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7|ubh.}(hj7|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_sub_relaxed (C function)c.raw_atomic_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_sub_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_sub_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjx|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjt|hhhj|hMubh)}(hraw_atomic_fetch_sub_relaxedh]h)}(hraw_atomic_fetch_sub_relaxedh]hraw_atomic_fetch_sub_relaxed}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjt|hhhj|hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubh)}(hjh]hi}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jl)}j_j|sbc.raw_atomic_fetch_sub_relaxedasbuh1hhj|ubj=)}(h h]h }(hj }hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hjh]hv}(hj'}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjt|hhhj|hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjp|hhhj|hMubah}(h]jk|ah ](jjeh"]h$]h&]jj)jhuh1hhj|hMhjm|hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjP}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjM}hhubah}(h]h ]h"]h$]h&]uh1jhjm|hhhj|hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jh}j4jh}j5j6j7uh1hhhhj:hNhNubjp)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_sub_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjr}h]h Parameters}(hjt}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjp}ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hj}h]hint i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj}h]h atomic_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj}ubeh}(h]h ]h"]h$]h&]uh1jhjl}ubj9)}(h**Description**h]jz)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj~hhhNhNubjz)}(h**v**h]hv}(hj#~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh to (}(hj~hhhNhNubjz)}(h**v**h]hv}(hj5~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh - }(hj~hhhNhNubjz)}(h**i**h]hi}(hjG~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh) with relaxed ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_sub_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_sub_relaxed() elsewhere.}(hj`~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubj9)}(h **Return**h]jz)}(hjq~h]hReturn}(hjs~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo~ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubj9)}(hThe original value of **v**.h](hThe original value of }(hj~hhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjl}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_inc (C function)c.raw_atomic_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h!void raw_atomic_inc (atomic_t *v)h]h)}(h void raw_atomic_inc(atomic_t *v)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~hhhj~hMubh)}(hraw_atomic_inch]h)}(hraw_atomic_inch]hraw_atomic_inc}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj~hhhj~hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j~sbc.raw_atomic_incasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubah}(h]h ]h"]h$]h&]jj uh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhj~hMubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1hhj~hMhj~hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjihhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_inc() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hNothing.h]hNothing.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_inc_return (C function)c.raw_atomic_inc_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'int raw_atomic_inc_return (atomic_t *v)h]h)}(h&int raw_atomic_inc_return(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_inc_returnh]h)}(hraw_atomic_inc_returnh]hraw_atomic_inc_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjǀhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĀubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjɀmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_inc_returnasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj|hhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_inc_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjlh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjŁhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjׁhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj9)}(hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_acquire (C function)c.raw_atomic_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_inc_return_acquire (atomic_t *v)h]h)}(h.int raw_atomic_inc_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjThhhjfhMubh)}(hraw_atomic_inc_return_acquireh]h)}(hraw_atomic_inc_return_acquireh]hraw_atomic_inc_return_acquire}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhjThhhjfhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j{sbc.raw_atomic_inc_return_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjƂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjӂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjThhhjfhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPhhhjfhMubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1hhjfhMhjMhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjfhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_inc_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj=h]h atomic_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj7ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hJSafe to use in noinstr code; prefer atomic_inc_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_inc_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hj҃h]hReturn}(hjԃhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЃubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_release (C function)c.raw_atomic_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_inc_return_release (atomic_t *v)h]h)}(h.int raw_atomic_inc_return_release(atomic_t *v)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj7hMubh)}(hraw_atomic_inc_return_releaseh]h)}(hraw_atomic_inc_return_releaseh]hraw_atomic_inc_return_release}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj7hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.raw_atomic_inc_return_releaseasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubah}(h]h ]h"]h$]h&]jj uh1jhj%hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhjhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj̈́hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʄhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic_inc_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj_hhhNhNubjz)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh to (}(hj_hhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh + 1) with release ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_inc_return_relaxed (C function)c.raw_atomic_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_inc_return_relaxed (atomic_t *v)h]h)}(h.int raw_atomic_inc_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM4ubh)}(hraw_atomic_inc_return_relaxedh]h)}(hraw_atomic_inc_return_relaxedh]hraw_atomic_inc_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM4ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_inc_return_relaxedasbuh1hhj3ubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM4hjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_inc_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj†hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj߆h]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj݆ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5hjنubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjنubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjֆubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj0hhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh to (}(hj0hhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh + 1) with relaxed ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjubj9)}(hJSafe to use in noinstr code; prefer atomic_inc_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_inc_return_relaxed() elsewhere.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_inc (C function)c.raw_atomic_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&int raw_atomic_fetch_inc (atomic_t *v)h]h)}(h%int raw_atomic_fetch_inc(atomic_t *v)h](j)}(hinth]hint}(hjˇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubj=)}(h h]h }(hjڇhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLJhhhjهhMJubh)}(hraw_atomic_fetch_inch]h)}(hraw_atomic_fetch_inch]hraw_atomic_fetch_inc}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLJhhhjهhMJubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_incasbuh1hhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjLJhhhjهhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjÇhhhjهhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjهhMJhjhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjlhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjهhMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_inc() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjɈhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjňhMKhjƈubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjňhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhjubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_inc() elsewhere.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj9)}(h **Return**h]jz)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_acquire (C function)c.raw_atomic_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_inc_acquire (atomic_t *v)h]h)}(h-int raw_atomic_fetch_inc_acquire(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMdubh)}(hraw_atomic_fetch_inc_acquireh]h)}(hraw_atomic_fetch_inc_acquireh]hraw_atomic_fetch_inc_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMdubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj܉hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjىubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjމmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_inc_acquireasbuh1hhjՉubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjՉubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՉubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjՉubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjщubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMdhjhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jXj4jXj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_inc_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhj\ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehj{ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMehjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMehjxubah}(h]h ]h"]h$]h&]uh1jhj\ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghj\ubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjҊhhhNhNubjz)}(h**v**h]hv}(hjڊhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҊubh to (}(hjҊhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҊubh + 1) with acquire ordering.}(hjҊhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhj\ubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_inc_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_inc_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhj\ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhj\ubj9)}(hThe original value of **v**.h](hThe original value of }(hj,hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_release (C function)c.raw_atomic_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_inc_release (atomic_t *v)h]h)}(h-int raw_atomic_fetch_inc_release(atomic_t *v)h](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~ubj=)}(h h]h }(hj|hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhj{hM~ubh)}(hraw_atomic_fetch_inc_releaseh]h)}(hraw_atomic_fetch_inc_releaseh]hraw_atomic_fetch_inc_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj{hM~ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_inc_releaseasbuh1hhjubj=)}(h h]h }(hj͋hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjۋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjihhhj{hM~ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhj{hM~ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhj{hM~hjbhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj{hM~ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j)j4j)j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_inc_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjRh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjLubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_inc_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_inc_release() elsewhere.}(hj֌hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_inc_relaxed (C function)c.raw_atomic_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_inc_relaxed (atomic_t *v)h]h)}(h-int raw_atomic_fetch_inc_relaxed(atomic_t *v)h](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:hhhjLhMubh)}(hraw_atomic_fetch_inc_relaxedh]h)}(hraw_atomic_fetch_inc_relaxedh]hraw_atomic_fetch_inc_relaxed}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhjLhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj~hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jasbc.raw_atomic_fetch_inc_relaxedasbuh1hhjwubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjsubah}(h]h ]h"]h$]h&]jj uh1jhj:hhhjLhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj6hhhjLhMubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1hhjLhMhj3hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjߍhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_inc_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj#h]h atomic_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj!ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjthhhNhNubjz)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh to (}(hjthhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubh + 1) with relaxed ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_inc_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_inc_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjΎhhhNhNubjz)}(h**v**h]hv}(hj֎hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΎubh.}(hjΎhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_dec (C function)c.raw_atomic_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h!void raw_atomic_dec (atomic_t *v)h]h)}(h void raw_atomic_dec(atomic_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhMubh)}(hraw_atomic_dech]h)}(hraw_atomic_dech]hraw_atomic_dec}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jl)}j_j2sbc.raw_atomic_decasbuh1hhjHubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjDubah}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jˏj4jˏj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_dec() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjՏh]h Parameters}(hj׏hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӏubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjϏubj9)}(h**Description**h]jz)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjEhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh to (}(hjEhhhNhNubjz)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh - 1) with relaxed ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubj9)}(h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_dec() elsewhere.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjϏubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_dec_return (C function)c.raw_atomic_dec_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'int raw_atomic_dec_return (atomic_t *v)h]h)}(h&int raw_atomic_dec_return(atomic_t *v)h](j)}(hinth]hint}(hjΐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʐhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjݐhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʐhhhjܐhMubh)}(hraw_atomic_dec_returnh]h)}(hraw_atomic_dec_returnh]hraw_atomic_dec_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjʐhhhjܐhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_dec_returnasbuh1hhjubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjʐhhhjܐhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƐhhhjܐhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjܐhMhjÐhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjohhubah}(h]h ]h"]h$]h&]uh1jhjÐhhhjܐhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_dec_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj̑hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjȑhMhjɑubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjȑhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj^hhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_acquire (C function)c.raw_atomic_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_dec_return_acquire (atomic_t *v)h]h)}(h.int raw_atomic_dec_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_dec_return_acquireh]h)}(hraw_atomic_dec_return_acquireh]hraw_atomic_dec_return_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjߒhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjܒubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j’sbc.raw_atomic_dec_return_acquireasbuh1hhjؒubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjؒubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؒubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjؒubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjԒubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j[j4j[j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_dec_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjՓhhhNhNubjz)}(h**v**h]hv}(hjݓhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjՓubh to (}(hjՓhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjՓubh - 1) with acquire ordering.}(hjՓhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubj9)}(hJSafe to use in noinstr code; prefer atomic_dec_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_dec_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj/hhhNhNubjz)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_release (C function)c.raw_atomic_dec_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_dec_return_release (atomic_t *v)h]h)}(h.int raw_atomic_dec_return_release(atomic_t *v)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlhhhj~hMubh)}(hraw_atomic_dec_return_releaseh]h)}(hraw_atomic_dec_return_releaseh]hraw_atomic_dec_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjlhhhj~hMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_dec_return_releaseasbuh1hhjubj=)}(h h]h }(hjДhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjޔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjlhhhj~hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1hhj~hMhjehhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,j4j,j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_dec_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjUh]h atomic_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj9)}(hJSafe to use in noinstr code; prefer atomic_dec_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_dec_return_release() elsewhere.}(hjٕhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic_dec_return_relaxed (C function)c.raw_atomic_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/int raw_atomic_dec_return_relaxed (atomic_t *v)h]h)}(h.int raw_atomic_dec_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=hhhjOhMubh)}(hraw_atomic_dec_return_relaxedh]h)}(hraw_atomic_dec_return_relaxedh]hraw_atomic_dec_return_relaxed}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhjOhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jdsbc.raw_atomic_dec_return_relaxedasbuh1hhjzubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjvubah}(h]h ]h"]h$]h&]jj uh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhjOhMhj6hhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_dec_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj&h]h atomic_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjwhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh to (}(hjwhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh - 1) with relaxed ordering.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hJSafe to use in noinstr code; prefer atomic_dec_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_dec_return_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjїhhhNhNubjz)}(h**v**h]hv}(hjٗhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjїubh.}(hjїhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_dec (C function)c.raw_atomic_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h&int raw_atomic_fetch_dec (atomic_t *v)h]h)}(h%int raw_atomic_fetch_dec(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hM$ubh)}(hraw_atomic_fetch_dech]h)}(hraw_atomic_fetch_dech]hraw_atomic_fetch_dec}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hM$ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTmodnameN classnameNjcjf)}ji]jl)}j_j5sbc.raw_atomic_fetch_decasbuh1hhjKubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hM$ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hM$hjhhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM$ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jΘj4jΘj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_dec() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjؘh]h Parameters}(hjژhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj֘ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjҘubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM%hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM%hjubah}(h]h ]h"]h$]h&]uh1jhjҘubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjҘubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjHhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh to (}(hjHhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh - 1) with full ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjҘubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjҘubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjҘubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjҘubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_acquire (C function)c.raw_atomic_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_dec_acquire (atomic_t *v)h]h)}(h-int raw_atomic_fetch_dec_acquire(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߙhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjߙhhhjhM>ubh)}(hraw_atomic_fetch_dec_acquireh]h)}(hraw_atomic_fetch_dec_acquireh]hraw_atomic_fetch_dec_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjߙhhhjhM>ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_dec_acquireasbuh1hhjubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjߙhhhjhM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjۙhhhjhM>ubah}(h]j֙ah ](jjeh"]h$]h&]jj)jhuh1hhjhM>hjؙhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjؙhhhjhM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_dec_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjȚh]h atomic_t *v}(hjʚhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjƚubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjšubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjݚhM?hjޚubah}(h]h ]h"]h$]h&]uh1jhjšubeh}(h]h ]h"]h$]h&]uh1jhjݚhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_acquire() elsewhere.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubj9)}(h **Return**h]jz)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjshhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_release (C function)c.raw_atomic_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_dec_release (atomic_t *v)h]h)}(h-int raw_atomic_fetch_dec_release(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXubj=)}(h h]h }(hjÛhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj›hMXubh)}(hraw_atomic_fetch_dec_releaseh]h)}(hraw_atomic_fetch_dec_releaseh]hraw_atomic_fetch_dec_release}(hj՛hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjћubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj›hMXubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jכsbc.raw_atomic_fetch_dec_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj›hMXubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj›hMXubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj›hMXhjhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj›hMXubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjtubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjԜh]h Description}(hj֜hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҜubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjtubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjtubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjtubj9)}(h **Return**h]jz)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjtubj9)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_dec_relaxed (C function)c.raw_atomic_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.int raw_atomic_fetch_dec_relaxed (atomic_t *v)h]h)}(h-int raw_atomic_fetch_dec_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMqubh)}(hraw_atomic_fetch_dec_relaxedh]h)}(hraw_atomic_fetch_dec_relaxedh]hraw_atomic_fetch_dec_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMqubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjŝhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjǝmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_dec_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhMqubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjhMqhjzhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj&hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhMqubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjEubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjjh]h atomic_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhjdubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjaubah}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthjEubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjÞhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj՞hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMshjEubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjEubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhjEubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_and (C function)c.raw_atomic_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void raw_atomic_and (int i, atomic_t *v)h]h)}(h'void raw_atomic_and(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjdhMubh)}(hraw_atomic_andh]h)}(hraw_atomic_andh]hraw_atomic_and}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjdhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjʟhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǟubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj̟modnameN classnameNjcjf)}ji]jl)}j_jysbc.raw_atomic_andasbuh1hhjßubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjßubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjßubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjßubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjdhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhjdhMhjKhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_and() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjoh]hint i}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj9)}(h;Safe to use in noinstr code; prefer atomic_and() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_and() elsewhere.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj9)}(h **Return**h]jz)}(hjOh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubj9)}(hNothing.h]hNothing.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_and (C function)c.raw_atomic_fetch_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_and (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_and(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_fetch_andh]h)}(hraw_atomic_fetch_andh]hraw_atomic_fetch_and}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjѡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͡ubj=)}(h h]h }(hjߡhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj͡ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj͡ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjɡubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_andasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjɡubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_and() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjƢhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj¢hMhjâubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj¢hMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj7hhhNhNubjz)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh to (}(hj7hhhNhNubjz)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh & }(hj7hhhNhNubjz)}(h**i**h]hi}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh) with full ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_acquire (C function)c.raw_atomic_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_fetch_and_acquireh]h)}(hraw_atomic_fetch_and_acquireh]hraw_atomic_fetch_and_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_and_acquireasbuh1hhjQubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjܣhhhjhMubah}(h]jףah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj٣hhubj )}(hhh]j9)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj٣hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jԤj4jԤj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_and_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjޤh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܤubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj6h]h atomic_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj0ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubeh}(h]h ]h"]h$]h&]uh1jhjؤubj9)}(h**Description**h]jz)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_and_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_acquire() elsewhere.}(hj̥hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubj9)}(h **Return**h]jz)}(hjݥh]hReturn}(hjߥhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjۥubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjؤubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_release (C function)c.raw_atomic_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0hhhjBhMubh)}(hraw_atomic_fetch_and_releaseh]h)}(hraw_atomic_fetch_and_releaseh]hraw_atomic_fetch_and_release}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhjBhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jWsbc.raw_atomic_fetch_and_releaseasbuh1hhjubj=)}(h h]h }(hjȦhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj֦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiubeh}(h]h ]h"]h$]h&]jj uh1jhj0hhhjBhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj,hhhjBhMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1hhjBhMhj)hhubj )}(hhh]j9)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjMh]hint i}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj)}(hhh]j9)}(h int valueh]h int value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjçhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjקhhhNhNubjz)}(h**v**h]hv}(hjߧhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjקubh to (}(hjקhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjקubh & }(hjקhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjקubh) with release ordering.}(hjקhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj9)}(hThe original value of **v**.h](hThe original value of }(hjChhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubh.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_and_relaxed (C function)c.raw_atomic_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_fetch_and_relaxedh]h)}(hraw_atomic_fetch_and_relaxedh]hraw_atomic_fetch_and_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjϨhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjݨhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_and_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj|hhhjhMubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjyhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtj4jtj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj֩h]h atomic_t *v}(hjةhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԩubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjЩubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjЩubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj'hhhNhNubjz)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh to (}(hj'hhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh & }(hj'hhhNhNubjz)}(h**i**h]hi}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh) with relaxed ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(h **Return**h]jz)}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_andnot (C function)c.raw_atomic_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+void raw_atomic_andnot (int i, atomic_t *v)h]h)}(h*void raw_atomic_andnot(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjԪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЪhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjЪhhhjhMubh)}(hraw_atomic_andnoth]h)}(hraw_atomic_andnoth]hraw_atomic_andnot}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjЪhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_andnotasbuh1hhjAubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjЪhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj̪hhhjhMubah}(h]jǪah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjɪhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjɪhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jīj4jīj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_andnot() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjΫh]h Parameters}(hjЫhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj̫ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj&h]h atomic_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubeh}(h]h ]h"]h$]h&]uh1jhjȫubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjwhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh to (}(hjwhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh & }(hjwhhhNhNubjz)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh) with relaxed ordering.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubj9)}(h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.h]h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubj9)}(h **Return**h]jz)}(hjͬh]hReturn}(hjϬhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjˬubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjȫubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_fetch_andnot (C function)c.raw_atomic_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0int raw_atomic_fetch_andnot (int i, atomic_t *v)h]h)}(h/int raw_atomic_fetch_andnot(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hMubh)}(hraw_atomic_fetch_andnoth]h)}(hraw_atomic_fetch_andnoth]hraw_atomic_fetch_andnot}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKubh)}(hjh]hi}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j5sbc.raw_atomic_fetch_andnotasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj+h]hint i}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj%ubj)}(hhh]j9)}(h int valueh]h int value}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjdh]h atomic_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjϮhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubjz)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_acquire (C function)!c.raw_atomic_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_acquire (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhjphM/ubh)}(hraw_atomic_fetch_andnot_acquireh]h)}(hraw_atomic_fetch_andnot_acquireh]hraw_atomic_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhjphM/ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj֯hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӯubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjدmodnameN classnameNjcjf)}ji]jl)}j_jsb!c.raw_atomic_fetch_andnot_acquireasbuh1hhjϯubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjϯubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϯubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϯubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhjphM/ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjZhhhjphM/ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1hhjphM/hjWhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hj7hhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphM/ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjVubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj{h]hint i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0hjuubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjrubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjͰhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjɰhM1hjʰubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɰhM1hjrubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjVubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**~i**h]h~i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjVubj9)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjVubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjVubj9)}(hThe original value of **v**.h](hThe original value of }(hjqhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_release (C function)!c.raw_atomic_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_release (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMJubh)}(hraw_atomic_fetch_andnot_releaseh]h)}(hraw_atomic_fetch_andnot_releaseh]hraw_atomic_fetch_andnot_release}(hjӱhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjϱubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMJubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]jl)}j_jձsb!c.raw_atomic_fetch_andnot_releaseasbuh1hhjubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMJhjhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj˲h]hint i}(hjͲhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjɲubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhjŲubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjŲubeh}(h]h ]h"]h$]h&]uh1jhjhMKhj²ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj²ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjUhhhNhNubjz)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh to (}(hjUhhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh & }(hjUhhhNhNubjz)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh) with release ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjubj9)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjɳhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_fetch_andnot_relaxed (C function)!c.raw_atomic_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_relaxed (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMdubh)}(hraw_atomic_fetch_andnot_relaxedh]h)}(hraw_atomic_fetch_andnot_relaxedh]hraw_atomic_fetch_andnot_relaxed}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMdubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubh)}(hjh]hi}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj7ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjxmodnameN classnameNjcjf)}ji]jl)}j_j%sb!c.raw_atomic_fetch_andnot_relaxedasbuh1hhjoubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj7ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMdhjhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjڴhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj״hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]j9)}(h int valueh]h int value}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMehj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMehjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjTh]h atomic_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjNubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMfhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh & }(hjhhhNhNubjz)}(h**~i**h]h~i}(hjѵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjubj9)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_or (C function)c.raw_atomic_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h'void raw_atomic_or (int i, atomic_t *v)h]h)}(h&void raw_atomic_or(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNhhhj`hM{ubh)}(h raw_atomic_orh]h)}(h raw_atomic_orh]h raw_atomic_or}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhj`hM{ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjƶhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjöubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjȶmodnameN classnameNjcjf)}ji]jl)}j_jusbc.raw_atomic_orasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjNhhhj`hM{ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJhhhj`hM{ubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhj`hM{hjGhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hj'hhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hM{ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jBj4jBj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_or() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjkh]hint i}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM|hjeubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjbubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjbubeh}(h]h ]h"]h$]h&]uh1jhjFubj9)}(h**Description**h]jz)}(hj߷h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjݷubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjFubj9)}(h:Safe to use in noinstr code; prefer atomic_or() elsewhere.h]h:Safe to use in noinstr code; prefer atomic_or() elsewhere.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj9)}(h **Return**h]jz)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj9)}(hNothing.h]hNothing.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_fetch_or (C function)c.raw_atomic_fetch_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,int raw_atomic_fetch_or (int i, atomic_t *v)h]h)}(h+int raw_atomic_fetch_or(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_fetch_orh]h)}(hraw_atomic_fetch_orh]hraw_atomic_fetch_or}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj͸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɸubj=)}(h h]h }(hj۸hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjɸubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjɸubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjŸubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_orasbuh1hhjubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjŸubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_or() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hj¹hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjܹubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܹubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj3hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh to (}(hj3hhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh | }(hj3hhhNhNubjz)}(h**i**h]hi}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh) with full ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h@Safe to use in noinstr code; prefer atomic_fetch_or() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_fetch_or() elsewhere.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_acquire (C function)c.raw_atomic_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_acquire (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܺhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjܺhhhjhMubh)}(hraw_atomic_fetch_or_acquireh]h)}(hraw_atomic_fetch_or_acquireh]hraw_atomic_fetch_or_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjܺhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_or_acquireasbuh1hhjMubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjܺhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjغhhhjhMubah}(h]jӺah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjպhhubj )}(hhh]j9)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjպhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jлj4jлj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_or_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjڻh]h Parameters}(hjܻhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjػubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj2h]h atomic_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhjԻubj9)}(h**Description**h]jz)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubj9)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_acquire() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_acquire() elsewhere.}(hjȼhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubj9)}(h **Return**h]jz)}(hjټh]hReturn}(hjۼhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj׼ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjԻubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_release (C function)c.raw_atomic_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_release (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,hhhj>hMubh)}(hraw_atomic_fetch_or_releaseh]h)}(hraw_atomic_fetch_or_releaseh]hraw_atomic_fetch_or_release}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ](jjeh"]h$]h&]jj uh1hhj,hhhj>hMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jSsbc.raw_atomic_fetch_or_releaseasbuh1hhjubj=)}(h h]h }(hjĽhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjҽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj߽hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjeubeh}(h]h ]h"]h$]h&]jj uh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj%hhubj )}(hhh]j9)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjIh]hint i}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjCubj)}(hhh]j9)}(h int valueh]h int value}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj@ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjӾhhhNhNubjz)}(h**v**h]hv}(hj۾hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӾubh to (}(hjӾhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӾubh | V}(hjӾhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjӾubh) with release ordering.}(hjӾhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubj9)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubj9)}(h **Return**h]jz)}(hj)h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubj9)}(hThe original value of **v**.h](hThe original value of }(hj?hhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_or_relaxed (C function)c.raw_atomic_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_relaxed (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|hhhjhMubh)}(hraw_atomic_fetch_or_relaxedh]h)}(hraw_atomic_fetch_or_relaxedh]hraw_atomic_fetch_or_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj|hhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj˿hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjٿhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_or_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjuhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj#hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh to (}(hj#hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh | }(hj#hhhNhNubjz)}(h**i**h]hi}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh) with relaxed ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(h **Return**h]jz)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_xor (C function)c.raw_atomic_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h(void raw_atomic_xor (int i, atomic_t *v)h]h)}(h'void raw_atomic_xor(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_xorh]h)}(hraw_atomic_xorh]hraw_atomic_xor}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_xorasbuh1hhj=ubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_xor() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj"h]h atomic_t *v}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjshhhNhNubjz)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh to (}(hjshhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh ^ }(hjshhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh) with relaxed ordering.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_fetch_xor (C function)c.raw_atomic_fetch_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_xor (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_xor(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhMubh)}(hraw_atomic_fetch_xorh]h)}(hraw_atomic_fetch_xorh]hraw_atomic_fetch_xor}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGubh)}(hjh]hi}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j1sbc.raw_atomic_fetch_xorasbuh1hhj{ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_xor() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hj'h]hint i}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj!ubj)}(hhh]j9)}(h int valueh]h int value}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj`h]h atomic_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_acquire (C function)c.raw_atomic_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhjlhMubh)}(hraw_atomic_fetch_xor_acquireh]h)}(hraw_atomic_fetch_xor_acquireh]hraw_atomic_fetch_xor_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_xor_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjlhMhjShhubj )}(hhh]j9)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjRubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjwh]hint i}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjuubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjqubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hjnubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjnubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjRubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjRubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjRubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjRubj9)}(hThe original value of **v**.h](hThe original value of }(hjmhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_release (C function)c.raw_atomic_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM:ubh)}(hraw_atomic_fetch_xor_releaseh]h)}(hraw_atomic_fetch_xor_releaseh]hraw_atomic_fetch_xor_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM:ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_xor_releaseasbuh1hhjubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM:hjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM:ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_xor_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubj)}(hhh]j9)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjQhhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh to (}(hjQhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh ^ }(hjQhhhNhNubjz)}(h**i**h]hi}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh) with release ordering.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_fetch_xor_relaxed (C function)c.raw_atomic_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMTubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hMTubh)}(hraw_atomic_fetch_xor_relaxedh]h)}(hraw_atomic_fetch_xor_relaxedh]hraw_atomic_fetch_xor_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMTubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubh)}(hjh]hi}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj3ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjtmodnameN classnameNjcjf)}ji]jl)}j_j!sbc.raw_atomic_fetch_xor_relaxedasbuh1hhjkubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj3ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMTubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMThjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMTubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjubj)}(hhh]j9)}(h int valueh]h int value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMUhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMUhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjPh]h atomic_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjJubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMVhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubj9)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_xchg (C function)c.raw_atomic_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*int raw_atomic_xchg (atomic_t *v, int new)h]h)}(h)int raw_atomic_xchg(atomic_t *v, int new)h](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJhhhj\hMkubh)}(hraw_atomic_xchgh]h)}(hraw_atomic_xchgh]hraw_atomic_xchg}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ](jjeh"]h$]h&]jj uh1hhjJhhhj\hMkubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jqsbc.raw_atomic_xchgasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjJhhhj\hMkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhj\hMkubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1hhj\hMkhjChhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhj$hhubah}(h]h ]h"]h$]h&]uh1jhjChhhj\hMkubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with full ordering. Safe to use in noinstr code; prefer atomic_xchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjCubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjhh]h atomic_t *v}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjbubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj}hMlhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMlhj_ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMmhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjCubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjCubj9)}(hhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj1hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh to }(hj1hhhNhNubjz)}(h**new**h]hnew}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh with acquire ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hDSafe to use in noinstr code; prefer atomic_xchg_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_acquire() elsewhere.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_xchg_release (C function)c.raw_atomic_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int raw_atomic_xchg_release (atomic_t *v, int new)h]h)}(h1int raw_atomic_xchg_release(atomic_t *v, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_xchg_releaseh]h)}(hraw_atomic_xchg_releaseh]hraw_atomic_xchg_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_xchg_releaseasbuh1hhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubh)}(hnewh]hnew}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with release ordering. Safe to use in noinstr code; prefer atomic_xchg_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjphhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh to }(hjphhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh with release ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_xchg_relaxed (C function)c.raw_atomic_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2int raw_atomic_xchg_relaxed (atomic_t *v, int new)h]h)}(h1int raw_atomic_xchg_relaxed(atomic_t *v, int new)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_xchg_relaxedh]h)}(hraw_atomic_xchg_relaxedh]hraw_atomic_xchg_relaxed}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_t *v, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jl)}j_j.sbc.raw_atomic_xchg_relaxedasbuh1hhjDubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj@ubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj@ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int new`` int value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Safe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj%h]h atomic_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj^h]hint new}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjXubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_xchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_cmpxchg (C function)c.raw_atomic_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6int raw_atomic_cmpxchg (atomic_t *v, int old, int new)h]h)}(h5int raw_atomic_cmpxchg(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFhhhjXhMubh)}(hraw_atomic_cmpxchgh]h)}(hraw_atomic_cmpxchgh]hraw_atomic_cmpxchg}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jmsbc.raw_atomic_cmpxchgasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhjXhMhj?hhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jpj4jpj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hj h]hint new}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj\hhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh == }(hj\hhhNhNubjz)}(h**old**h]hold}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh), atomically updates }(hj\hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh to }(hj\hhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh with full ordering. Otherwise, }(hj\hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh2 is not modified and relaxed ordering is provided.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.h]h?Safe to use in noinstr code; prefer atomic_cmpxchg() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_acquire (C function)c.raw_atomic_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_acquire (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_acquire(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj;hMubh)}(hraw_atomic_cmpxchg_acquireh]h)}(hraw_atomic_cmpxchg_acquireh]hraw_atomic_cmpxchg_acquire}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hMubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjomodnameN classnameNjcjf)}ji]jl)}j_jPsbc.raw_atomic_cmpxchg_acquireasbuh1hhjfubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj"hhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj|h]h atomic_t *v}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj?hhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh == }(hj?hhhNhNubjz)}(h**old**h]hold}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh), atomically updates }(hj?hhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh to }(hj?hhhNhNubjz)}(h**new**h]hnew}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh# with acquire ordering. Otherwise, }(hj?hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh2 is not modified and relaxed ordering is provided.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_release (C function)c.raw_atomic_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_release (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_release(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhM ubh)}(hraw_atomic_cmpxchg_releaseh]h)}(hraw_atomic_cmpxchg_releaseh]hraw_atomic_cmpxchg_release}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhM ubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjRmodnameN classnameNjcjf)}ji]jl)}j_j3sbc.raw_atomic_cmpxchg_releaseasbuh1hhjIubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj_h]h atomic_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjYubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM hjVubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj"hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh == }(hj"hhhNhNubjz)}(h**old**h]hold}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh), atomically updates }(hj"hhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh to }(hj"hhhNhNubjz)}(h**new**h]hnew}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh# with release ordering. Otherwise, }(hj"hhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh2 is not modified and relaxed ordering is provided.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj9)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_cmpxchg_relaxed (C function)c.raw_atomic_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_relaxed (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM(ubh)}(hraw_atomic_cmpxchg_relaxedh]h)}(hraw_atomic_cmpxchg_relaxedh]hraw_atomic_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM(ubj )}(h(atomic_t *v, int old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_cmpxchg_relaxedasbuh1hhj,ubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hjh]hv}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM(hjhhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjBh]h atomic_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hj<ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM)hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM)hj9ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]j?)}(hj{h]hint old}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjuubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM*hj9ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hj9ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubj9)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic_try_cmpxchg (C function)c.raw_atomic_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhj/ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj+ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMBhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMBhj(ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjjh]hint *old}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjdubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMChjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMChj(ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhj ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhj ubj9)}(hCSafe to use in noinstr code; prefer atomic_try_cmpxchg() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_try_cmpxchg() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhj ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_try_cmpxchg_acquire (C function) c.raw_atomic_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_acquire (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMcubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMcubh)}(hraw_atomic_try_cmpxchg_acquireh]h)}(hraw_atomic_try_cmpxchg_acquireh]hraw_atomic_try_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMcubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8modnameN classnameNjcjf)}ji]jl)}j_jsb c.raw_atomic_try_cmpxchg_acquireasbuh1hhj/ubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hjh]hv}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMcubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMchjhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMcubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j)j4j)j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghj-ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjRh]h atomic_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjLubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjghMdhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMdhjIubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjIubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhj-ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghj-ubj9)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhj-ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj-ubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_try_cmpxchg_release (C function) c.raw_atomic_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj%hMubh)}(hraw_atomic_try_cmpxchg_releaseh]h)}(hraw_atomic_try_cmpxchg_releaseh]hraw_atomic_try_cmpxchg_release}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hMubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jl)}j_j:sb c.raw_atomic_try_cmpxchg_releaseasbuh1hhjPubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj%hMhj hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jJj4jJj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjsh]h atomic_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjmubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj6hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh == }(hj6hhhNhNubjz)}(h**old**h]hold}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh), atomically updates }(hj6hhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh to }(hj6hhhNhNubjz)}(h**new**h]hnew}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh# with release ordering. Otherwise, }(hj6hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh is not modified, }(hj6hhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh$ is updated to the current value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh#, and relaxed ordering is provided.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_try_cmpxchg_relaxed (C function) c.raw_atomic_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_relaxed (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhjFhMubh)}(hraw_atomic_try_cmpxchg_relaxedh]h)}(hraw_atomic_try_cmpxchg_relaxedh]hraw_atomic_try_cmpxchg_relaxed}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhjFhMubj )}(h (atomic_t *v, int *old, int new)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzmodnameN classnameNjcjf)}ji]jl)}j_j[sb c.raw_atomic_try_cmpxchg_relaxedasbuh1hhjqubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(hint newh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hnewh]hnew}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhjFhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhjFhMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhjFhMhj.hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjFhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]j?)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]j?)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjWhhhNhNubjz)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh == }(hjWhhhNhNubjz)}(h**old**h]hold}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh), atomically updates }(hjWhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh to }(hjWhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh# with relaxed ordering. Otherwise, }(hjWhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh is not modified, }(hjWhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh$ is updated to the current value of }(hjWhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh#, and relaxed ordering is provided.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj9)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if the exchange occurred, }(hj hhhNhNubjz)}(h **false**h]hfalse}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_sub_and_test (C function)c.raw_atomic_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool raw_atomic_sub_and_test (int i, atomic_t *v)h]h)}(h0bool raw_atomic_sub_and_test(int i, atomic_t *v)h](j)}(hjh]hbool}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjVhhhjghMubh)}(hraw_atomic_sub_and_testh]h)}(hraw_atomic_sub_and_testh]hraw_atomic_sub_and_test}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ](jjeh"]h$]h&]jj uh1hhjVhhhjghMubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j|sbc.raw_atomic_sub_and_testasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjVhhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjRhhhjghMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjOhhubj )}(hhh]j9)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhj:hNhNubjp)}(hXD**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_sub_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]j?)}(hjrh]hint i}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj)}(hhh]j9)}(hint value to subtracth]hint value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj9)}(hDSafe to use in noinstr code; prefer atomic_sub_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_sub_and_test() elsewhere.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj9)}(h **Return**h]jz)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh if the resulting value of }(hjhhhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh is zero, }(hjhhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubh otherwise.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_dec_and_test (C function)c.raw_atomic_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool raw_atomic_dec_and_test (atomic_t *v)h]h)}(h)bool raw_atomic_dec_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_dec_and_testh]h)}(hraw_atomic_dec_and_testh]hraw_atomic_dec_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_dec_and_testasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_dec_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hDSafe to use in noinstr code; prefer atomic_dec_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_dec_and_test() elsewhere.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh if the resulting value of }(hjXhhhNhNubjz)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh is zero, }(hjXhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh otherwise.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_inc_and_test (C function)c.raw_atomic_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool raw_atomic_inc_and_test (atomic_t *v)h]h)}(h)bool raw_atomic_inc_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_inc_and_testh]h)}(hraw_atomic_inc_and_testh]hraw_atomic_inc_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_inc_and_testasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtj4jtj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_inc_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hDSafe to use in noinstr code; prefer atomic_inc_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_inc_and_test() elsewhere.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh if the resulting value of }(hjHhhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh is zero, }(hjHhhhNhNubjz)}(h **false**h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh otherwise.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_add_negative (C function)c.raw_atomic_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool raw_atomic_add_negative (int i, atomic_t *v)h]h)}(h0bool raw_atomic_add_negative(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic_add_negativeh]h)}(hraw_atomic_add_negativeh]hraw_atomic_add_negative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_add_negativeasbuh1hhjubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXC**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_add_negative() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjKhhhNhNubjz)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh to (}(hjKhhhNhNubjz)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh + }(hjKhhhNhNubjz)}(h**i**h]hi}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh) with full ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_acquire (C function)!c.raw_atomic_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj%hM ubh)}(hraw_atomic_add_negative_acquireh]h)}(hraw_atomic_add_negative_acquireh]hraw_atomic_add_negative_acquire}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj%hM ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubh)}(hjh]hi}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j:sb!c.raw_atomic_add_negative_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj%hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj%hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj%hM hj hhubj )}(hhh]j9)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hj0h]hint i}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj*ubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhM hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM hj'ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjih]h atomic_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hM hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hj ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh if the resulting value of }(hj&hhhNhNubjz)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh is negative, }(hj&hhhNhNubjz)}(h **false**h]hfalse}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh otherwise.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_release (C function)!c.raw_atomic_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_release (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_release(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM7 ubh)}(hraw_atomic_add_negative_releaseh]h)}(hraw_atomic_add_negative_releaseh]hraw_atomic_add_negative_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM7 ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb!c.raw_atomic_add_negative_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM7 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM7 ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhM7 hj|hhubj )}(hhh]j9)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hj[hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhM7 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jvj4jvj5j6j7uh1hhhhj:hNhNubjp)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_add_negative_release() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjzubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM8 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8 hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubeh}(h]h ]h"]h$]h&]uh1jhjzubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjzubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj)hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh to (}(hj)hhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh + }(hj)hhhNhNubjz)}(h**i**h]hi}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh) with release ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjzubj9)}(hLSafe to use in noinstr code; prefer atomic_add_negative_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_release() elsewhere.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjzubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM> hjzubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNube(h)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_add_negative_relaxed (C function)!c.raw_atomic_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMQ ubh)}(hraw_atomic_add_negative_relaxedh]h)}(hraw_atomic_add_negative_relaxedh]hraw_atomic_add_negative_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMQ ubj )}(h(int i, atomic_t *v)h](j&)}(hint ih](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hjh]hi}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubj&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jl)}j_jsb!c.raw_atomic_add_negative_relaxedasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMQ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMQ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMQ hjhhubj )}(hhh]j9)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]j?)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMR hj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMR hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjGh]h atomic_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjAubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMS hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMS hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hjubj9)}(hLSafe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_fetch_add_unless (C function)c.raw_atomic_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h;int raw_atomic_fetch_add_unless (atomic_t *v, int a, int u)h]h)}(h:int raw_atomic_fetch_add_unless(atomic_t *v, int a, int u)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh ubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjshMh ubh)}(hraw_atomic_fetch_add_unlessh]h)}(hraw_atomic_fetch_add_unlessh]hraw_atomic_fetch_add_unless}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjshMh ubj )}(h(atomic_t *v, int a, int u)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_fetch_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint uh](j)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubh)}(hj‰h]hu}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjshMh ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhjshMh ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1hhjshMh hjZhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hjnhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshMh ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int a`` int value to add ``int u`` int value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMi hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMi hjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j?)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMj hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMj hjubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j?)}(hj$h]hint u}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMk hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMk hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjuhhhNhNubjz)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh != }(hjuhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh), atomically updates }(hjuhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh to (}(hjuhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh + }(hjuhhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh!) with full ordering. Otherwise, }(hjuhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh2 is not modified and relaxed ordering is provided.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hjubj9)}(hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"raw_atomic_add_unless (C function)c.raw_atomic_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6bool raw_atomic_add_unless (atomic_t *v, int a, int u)h]h)}(h5bool raw_atomic_add_unless(atomic_t *v, int a, int u)h](j)}(hjh]hbool}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjThhhjehM ubh)}(hraw_atomic_add_unlessh]h)}(hraw_atomic_add_unlessh]hraw_atomic_add_unless}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ](jjeh"]h$]h&]jj uh1hhjThhhjehM ubj )}(h(atomic_t *v, int a, int u)h](j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jzsbc.raw_atomic_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjThhhjehM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjPhhhjehM ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1hhjehM hjMhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj`hhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjehM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int a`` int value to add ``int u`` int value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_add_unless() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``int a`` int value to add h](j)}(h ``int a``h]j?)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]j?)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hint value to compare withh]hint value to compare with}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjghhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh != }(hjghhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh), atomically updates }(hjghhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh to (}(hjghhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh + }(hjghhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh!) with full ordering. Otherwise, }(hjghhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubh2 is not modified and relaxed ordering is provided.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh was updated, }(hj hhhNhNubjz)}(h **false**h]hfalse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_inc_not_zero (C function)c.raw_atomic_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*bool raw_atomic_inc_not_zero (atomic_t *v)h]h)}(h)bool raw_atomic_inc_not_zero(atomic_t *v)h](j)}(hjh]hbool}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfhhhjwhM ubh)}(hraw_atomic_inc_not_zeroh]h)}(hraw_atomic_inc_not_zeroh]hraw_atomic_inc_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjfhhhjwhM ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_inc_not_zeroasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjfhhhjwhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjwhM ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1hhjwhM hj_hhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjwhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j%j4j%j5j6j7uh1hhhhj:hNhNubjp)}(hX^**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjNh]h atomic_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjchM hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% + 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj9)}(hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_inc_unless_negative (C function) c.raw_atomic_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool raw_atomic_inc_unless_negative (atomic_t *v)h]h)}(h0bool raw_atomic_inc_unless_negative(atomic_t *v)h](j)}(hjh]hbool}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzhhhjhM ubh)}(hraw_atomic_inc_unless_negativeh]h)}(hraw_atomic_inc_unless_negativeh]hraw_atomic_inc_unless_negative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjzhhhjhM ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.raw_atomic_inc_unless_negativeasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjzhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjvhhhjhM ubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjshhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhj:hNhNubjp)}(hXe**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjbh]h atomic_t *v}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhM hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh >= 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% + 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj9)}(hKSafe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh if }(hj1hhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh was updated, }(hj1hhhNhNubjz)}(h **false**h]hfalse}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh otherwise.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic_dec_unless_positive (C function) c.raw_atomic_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1bool raw_atomic_dec_unless_positive (atomic_t *v)h]h)}(h0bool raw_atomic_dec_unless_positive(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic_dec_unless_positiveh]h)}(hraw_atomic_dec_unless_positiveh]hraw_atomic_dec_unless_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.raw_atomic_dec_unless_positiveasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2 hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jM j4jM j5j6j7uh1hhhhj:hNhNubjp)}(hXe**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjW h]h Parameters}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hjv h]h atomic_t *v}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjt ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjp ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj hM hjm ubah}(h]h ]h"]h$]h&]uh1jhjQ ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh <= 0), atomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh% - 1) with full ordering. Otherwise, }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubj9)}(hKSafe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubj9)}(h **Return**h]jz)}(hj/ h]hReturn}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj- ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE ubh if }(hjE hhhNhNubjz)}(h**v**h]hv}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE ubh was updated, }(hjE hhhNhNubjz)}(h **false**h]hfalse}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE ubh otherwise.}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjQ ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_dec_if_positive (C function)c.raw_atomic_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,int raw_atomic_dec_if_positive (atomic_t *v)h]h)}(h+int raw_atomic_dec_if_positive(atomic_t *v)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hM ubh)}(hraw_atomic_dec_if_positiveh]h)}(hraw_atomic_dec_if_positiveh]hraw_atomic_dec_if_positive}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM ubj )}(h (atomic_t *v)h]j&)}(h atomic_t *vh](h)}(hhh]h)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sbc.raw_atomic_dec_if_positiveasbuh1hhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj! hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hM hj hhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjG hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jb j4jb j5j6j7uh1hhhhj:hNhNubjp)}(hXs**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_dec_if_positive() elsewhere. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjl h]h Parameters}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]j?)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]j9)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjf ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh > 0), atomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh% - 1) with full ordering. Otherwise, }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubj9)}(hGSafe to use in noinstr code; prefer atomic_dec_if_positive() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_dec_if_positive() elsewhere.}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubj9)}(h **Return**h]jz)}(hjD h]hReturn}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjZ hhhNhNubjz)}(h**v**h]hv}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ ubh - 1), regardless of whether }(hjZ hhhNhNubjz)}(h**v**h]hv}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ ubh was updated.}(hjZ hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjf ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_read (C function)c.raw_atomic64_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+s64 raw_atomic64_read (const atomic64_t *v)h]h)}(h*s64 raw_atomic64_read(const atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_readsbc.raw_atomic64_readasbuh1hhj hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hM ubh)}(hraw_atomic64_readh]h)}(hj h]hraw_atomic64_read}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM ubj )}(h(const atomic64_t *v)h]j&)}(hconst atomic64_t *vh](j+)}(hj<*h]hconst}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]j c.raw_atomic64_readasbuh1hhj ubj=)}(h h]h }(hj; hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjV hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hM hj hhubj )}(hhh]j9)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj| hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic64_t *v`` pointer to atomic64_t **Description** Atomically loads the value of **v** with relaxed ordering. Safe to use in noinstr code; prefer atomic64_read() elsewhere. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]j?)}(hj h]hconst atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(h **Return**h]jz)}(hjCh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjYhhhNhNubjz)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_read_acquire (C function)c.raw_atomic64_read_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_read_acquire (const atomic64_t *v)h]h)}(h2s64 raw_atomic64_read_acquire(const atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_read_acquiresbc.raw_atomic64_read_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic64_read_acquireh]h)}(hjh]hraw_atomic64_read_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(const atomic64_t *v)h]j&)}(hconst atomic64_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jc.raw_atomic64_read_acquireasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic64_t *v`` pointer to atomic64_t **Description** Atomically loads the value of **v** with acquire ordering. Safe to use in noinstr code; prefer atomic64_read_acquire() elsewhere. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]j?)}(hjh]hconst atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_set (C function)c.raw_atomic64_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void raw_atomic64_set (atomic64_t *v, s64 i)h]h)}(h+void raw_atomic64_set(atomic64_t *v, s64 i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM8 ubh)}(hraw_atomic64_seth]h)}(hraw_atomic64_seth]hraw_atomic64_set}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM8 ubj )}(h(atomic64_t *v, s64 i)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic64_setasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_setasbuh1hhjubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM8 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM8 ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhM8 hj|hhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjohhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhM8 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 i`` s64 value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Safe to use in noinstr code; prefer atomic64_set() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj=hhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh to }(hj=hhhNhNubjz)}(h**i**h]hi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubj9)}(h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM= hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic64_set_release (C function)c.raw_atomic64_set_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4void raw_atomic64_set_release (atomic64_t *v, s64 i)h]h)}(h3void raw_atomic64_set_release(atomic64_t *v, s64 i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMI ubh)}(hraw_atomic64_set_releaseh]h)}(hraw_atomic64_set_releaseh]hraw_atomic64_set_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMI ubj )}(h(atomic64_t *v, s64 i)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic64_set_releaseasbuh1hhjubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]j"c.raw_atomic64_set_releaseasbuh1hhjUubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMI ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMI ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMI hjhhubj )}(hhh]j9)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMI ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 i`` s64 value to assign **Description** Atomically sets **v** to **i** with release ordering. Safe to use in noinstr code; prefer atomic64_set_release() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMJ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJ hjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]j?)}(hj+h]hs64 i}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMK hj%ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMK hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMK hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj|hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh to }(hj|hhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh with release ordering.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhML hjubj9)}(hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMN hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_add (C function)c.raw_atomic64_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void raw_atomic64_add (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_add(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMc ubh)}(hraw_atomic64_addh]h)}(hraw_atomic64_addh]hraw_atomic64_add}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMc ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]jl)}j_j(sbc.raw_atomic64_addasbuh1hhj>ubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hjh]hi}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jac.raw_atomic64_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMc ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMc ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMc hjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMc ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_add() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hj ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj1h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMd hj+ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhMd hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMd hj(ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjjh]h atomic64_t *v}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMe hjdubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMe hj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hj ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMf hj ubj9)}(h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hj ubj9)}(hNothing.h]hNothing.}(hj'hhhNhNubah}(Lh]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_add_return (C function)c.raw_atomic64_add_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_add_return (s64 i, atomic64_t *v)h]h)}(h1s64 raw_atomic64_add_return(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_add_returnsbc.raw_atomic64_add_returnasbuh1hhjRhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt ubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRhhhjzhMt ubh)}(hraw_atomic64_add_returnh]h)}(hjwh]hraw_atomic64_add_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRhhhjzhMt ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]juc.raw_atomic64_add_returnasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]juc.raw_atomic64_add_returnasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjRhhhjzhMt ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjzhMt ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1hhjzhMt hjKhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjQhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjzhMt ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jlj4jlj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_add_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjpubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMu hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMu hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMv hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMv hjubeh}(h]h ]h"]h$]h&]uh1jhjpubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hjpubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMw hjpubj9)}(hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hjpubj9)}(h **Return**h]jz)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ hjpubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM| hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_acquire (C function)!c.raw_atomic64_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_add_return_acquire (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_add_return_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_add_return_acquiresb!c.raw_atomic64_add_return_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic64_add_return_acquireh]h)}(hjh]hraw_atomic64_add_return_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#modnameN classnameNjcjf)}ji]j!c.raw_atomic64_add_return_acquireasbuh1hhjubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]j!c.raw_atomic64_add_return_acquireasbuh1hhjaubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjDh]h atomic64_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj>ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjYhM hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hLSafe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_release (C function)!c.raw_atomic64_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_add_return_release (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_add_return_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_add_return_releasesb!c.raw_atomic64_add_return_releaseasbuh1hhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhjfhM ubh)}(hraw_atomic64_add_return_releaseh]h)}(hjch]hraw_atomic64_add_return_release}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhjfhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]ja!c.raw_atomic64_add_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]ja!c.raw_atomic64_add_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhjfhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhjfhM ubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhjfhM hj7hhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjfhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jXj4jXj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_add_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj{ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh + }(hj hhhNhNubjz)}(h**i**h]hi}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj9)}(hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj9)}(h **Return**h]jz)}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjwhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_add_return_relaxed (C function)!c.raw_atomic64_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_add_return_relaxed (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_add_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_add_return_relaxedsb!c.raw_atomic64_add_return_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic64_add_return_relaxedh]h)}(hjh]hraw_atomic64_add_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j!c.raw_atomic64_add_return_relaxedasbuh1hhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]j!c.raw_atomic64_add_return_relaxedasbuh1hhjMubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj0 h]h atomic64_t *v}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj. ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj* ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjE hM hjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jhjE hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjk h]h Description}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh + }(hj hhhNhNubjz)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hLSafe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_add (C function)c.raw_atomic64_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_add (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_add(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj1!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3!modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_addsbc.raw_atomic64_fetch_addasbuh1hhj*!hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjS!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*!hhhjR!hM ubh)}(hraw_atomic64_fetch_addh]h)}(hjO!h]hraw_atomic64_fetch_add}(hje!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhja!ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj*!hhhjR!hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jM!c.raw_atomic64_fetch_addasbuh1hhj|!ubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj|!ubh)}(hjh]hi}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjx!ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jM!c.raw_atomic64_fetch_addasbuh1hhj!ubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hjh]hv}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjx!ubeh}(h]h ]h"]h$]h&]jj uh1jhj*!hhhjR!hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&!hhhjR!hM ubah}(h]j!!ah ](jjeh"]h$]h&]jj)jhuh1hhjR!hM hj#!hhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hj,"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)"hhubah}(h]h ]h"]h$]h&]uh1jhj#!hhhjR!hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jD"j4jD"j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_add() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjN"h]h Parameters}(hjP"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL"ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjm"h]hs64 i}(hjo"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjk"ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjg"ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jhjg"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjd"ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj"h]h atomic64_t *v}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj"ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjd"ubeh}(h]h ]h"]h$]h&]uh1jhjH"ubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj"hhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh to (}(hj"hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh + }(hj"hhhNhNubjz)}(h**i**h]hi}(hj##hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh) with full ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.}(hj<#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubj9)}(h **Return**h]jz)}(hjM#h]hReturn}(hjO#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK#ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubj9)}(hThe original value of **v**.h](hThe original value of }(hjc#hhhNhNubjz)}(h**v**h]hv}(hjk#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc#ubh.}(hjc#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjH"ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_acquire (C function) c.raw_atomic64_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_add_acquiresb c.raw_atomic64_fetch_add_acquireasbuh1hhj#hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#hhhj#hM ubh)}(hraw_atomic64_fetch_add_acquireh]h)}(hj#h]hraw_atomic64_fetch_add_acquire}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj#hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#modnameN classnameNjcjf)}ji]j# c.raw_atomic64_fetch_add_acquireasbuh1hhj#ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#ubh)}(hjh]hi}(hj%$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj#ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj@$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjB$modnameN classnameNjcjf)}ji]j# c.raw_atomic64_fetch_add_acquireasbuh1hhj9$ubj=)}(h h]h }(hj^$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9$ubj)}(hjh]h*}(hjl$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9$ubh)}(hjh]hv}(hjy$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj#ubeh}(h]h ]h"]h$]h&]jj uh1jhj#hhhj#hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj#hM ubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1hhj#hM hj#hhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj$h]hs64 i}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj$hM hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hj$ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj%h]h atomic64_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj%ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj5%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1%hM hj2%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj1%hM hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h**Description**h]jz)}(hjW%h]h Description}(hjY%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU%ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjm%hhhNhNubjz)}(h**v**h]hv}(hju%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm%ubh to (}(hjm%hhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm%ubh + }(hjm%hhhNhNubjz)}(h**i**h]hi}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm%ubh) with acquire ordering.}(hjm%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj9)}(h **Return**h]jz)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj9)}(hThe original value of **v**.h](hThe original value of }(hj%hhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_release (C function) c.raw_atomic64_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_add_releasesb c.raw_atomic64_fetch_add_releaseasbuh1hhj&hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj?&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&hhhj>&hM ubh)}(hraw_atomic64_fetch_add_releaseh]h)}(hj;&h]hraw_atomic64_fetch_add_release}(hjQ&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjM&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&hhhj>&hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjo&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjq&modnameN classnameNjcjf)}ji]j9& c.raw_atomic64_fetch_add_releaseasbuh1hhjh&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjh&ubh)}(hjh]hi}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjd&ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]j9& c.raw_atomic64_fetch_add_releaseasbuh1hhj&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjd&ubeh}(h]h ]h"]h$]h&]jj uh1jhj&hhhj>&hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj&hhhj>&hM ubah}(h]j &ah ](jjeh"]h$]h&]jj)jhuh1hhj>&hM hj&hhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj>&hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j0'j4j0'j5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj:'h]h Parameters}(hj<'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8'ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjY'h]hs64 i}(hj['hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjW'ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjS'ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjn'hM hjo'ubah}(h]h ]h"]h$]h&]uh1jhjS'ubeh}(h]h ]h"]h$]h&]uh1jhjn'hM hjP'ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj'h]h atomic64_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj'ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hjP'ubeh}(h]h ]h"]h$]h&]uh1jhj4'ubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh to (}(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh + }(hj'hhhNhNubjz)}(h**i**h]hi}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh) with release ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere.}(hj((hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubj9)}(h **Return**h]jz)}(hj9(h]hReturn}(hj;(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7(ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubj9)}(hThe original value of **v**.h](hThe original value of }(hjO(hhhNhNubjz)}(h**v**h]hv}(hjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO(ubh.}(hjO(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj4'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_add_relaxed (C function) c.raw_atomic64_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_add_relaxedsb c.raw_atomic64_fetch_add_relaxedasbuh1hhj(hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ ubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(hhhj(hM+ ubh)}(hraw_atomic64_fetch_add_relaxedh]h)}(hj(h]hraw_atomic64_fetch_add_relaxed}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj(hM+ ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]j( c.raw_atomic64_fetch_add_relaxedasbuh1hhj(ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubh)}(hjh]hi}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj,)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj))ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj.)modnameN classnameNjcjf)}ji]j( c.raw_atomic64_fetch_add_relaxedasbuh1hhj%)ubj=)}(h h]h }(hjJ)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%)ubj)}(hjh]h*}(hjX)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%)ubh)}(hjh]hv}(hje)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj(hM+ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj(hM+ ubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhj(hM+ hj(hhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hM+ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j)j4j)j5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_add_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj)ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hj)h]hs64 i}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hj)ubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hM, hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM, hj)ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj*h]h atomic64_t *v}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj*ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj!*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hM- hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM- hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubj9)}(h**Description**h]jz)}(hjC*h]h Description}(hjE*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjA*ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj)ubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjY*hhhNhNubjz)}(h**v**h]hv}(hja*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjY*ubh to (}(hjY*hhhNhNubjz)}(h**v**h]hv}(hjs*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjY*ubh + }(hjY*hhhNhNubjz)}(h**i**h]hi}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjY*ubh) with relaxed ordering.}(hjY*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM. hj)ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_relaxed() elsewhere.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hj)ubj9)}(h **Return**h]jz)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2 hj)ubj9)}(hThe original value of **v**.h](hThe original value of }(hj*hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3 hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_sub (C function)c.raw_atomic64_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void raw_atomic64_sub (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_sub(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB ubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+hhhj+hMB ubh)}(hraw_atomic64_subh]h)}(hraw_atomic64_subh]hraw_atomic64_sub}(hj'+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#+ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+hhhj+hMB ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjF+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC+ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjH+modnameN classnameNjcjf)}ji]jl)}j_j)+sbc.raw_atomic64_subasbuh1hhj?+ubj=)}(h h]h }(hjf+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?+ubh)}(hjh]hi}(hjt+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj;+ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+modnameN classnameNjcjf)}ji]jb+c.raw_atomic64_subasbuh1hhj+ubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hjh]hv}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj;+ubeh}(h]h ]h"]h$]h&]jj uh1jhj+hhhj+hMB ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj*hhhj+hMB ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhj+hMB hj*hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB hj+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj+hMB ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j ,j4j ,j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_sub() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj ,ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj2,h]hs64 i}(hj4,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0,ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hj,,ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjG,hMC hjH,ubah}(h]h ]h"]h$]h&]uh1jhj,,ubeh}(h]h ]h"]h$]h&]uh1jhjG,hMC hj),ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjk,h]h atomic64_t *v}(hjm,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hji,ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD hje,ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hMD hj,ubah}(h]h ]h"]h$]h&]uh1jhje,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMD hj),ubeh}(h]h ]h"]h$]h&]uh1jhj ,ubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj ,ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj,hhhNhNubjz)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh to (}(hj,hhhNhNubjz)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh - }(hj,hhhNhNubjz)}(h**i**h]hi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh) with relaxed ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hj ,ubj9)}(h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hj ,ubj9)}(h **Return**h]jz)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hj ,ubj9)}(hNothing.h]hNothing.}(hj(-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj ,ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_sub_return (C function)c.raw_atomic64_sub_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_sub_return (s64 i, atomic64_t *v)h]h)}(h1s64 raw_atomic64_sub_return(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjZ-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\-modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_sub_returnsbc.raw_atomic64_sub_returnasbuh1hhjS-hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.h'hMS ubj=)}(h h]h }(hj|-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjS-hhhj{-hMS ubh)}(hraw_atomic64_sub_returnh]h)}(hjx-h]hraw_atomic64_sub_return}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjS-hhhj{-hMS ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jv-c.raw_atomic64_sub_returnasbuh1hhj-ubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubh)}(hjh]hi}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jv-c.raw_atomic64_sub_returnasbuh1hhj-ubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hjh]hv}(hj,.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj-ubeh}(h]h ]h"]h$]h&]jj uh1jhjS-hhhj{-hMS ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjO-hhhj{-hMS ubah}(h]jJ-ah ](jjeh"]h$]h&]jj)jhuh1hhj{-hMS hjL-hhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjU.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjR.hhubah}(h]h ]h"]h$]h&]uh1jhjL-hhhj{-hMS ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jm.j4jm.j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_sub_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjw.h]h Parameters}(hjy.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhju.ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hjq.ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj.h]hs64 i}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hj.ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMT hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMT hj.ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj.h]h atomic64_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj.ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj.ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMU hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMU hj.ubeh}(h]h ]h"]h$]h&]uh1jhjq.ubj9)}(h**Description**h]jz)}(hj /h]h Description}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hjq.ubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj /hhhNhNubjz)}(h**v**h]hv}(hj(/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj /ubh to (}(hj /hhhNhNubjz)}(h**v**h]hv}(hj:/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj /ubh - }(hj /hhhNhNubjz)}(h**i**h]hi}(hjL/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj /ubh) with full ordering.}(hj /hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hjq.ubj9)}(hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_sub_return() elsewhere.}(hje/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hjq.ubj9)}(h **Return**h]jz)}(hjv/h]hReturn}(hjx/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt/ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZ hjq.ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj/hhhNhNubjz)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hjq.ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_acquire (C function)!c.raw_atomic64_sub_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_sub_return_acquire (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_sub_return_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_sub_return_acquiresb!c.raw_atomic64_sub_return_acquireasbuh1hhj/hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/hhhj/hMn ubh)}(hraw_atomic64_sub_return_acquireh]h)}(hj/h]hraw_atomic64_sub_return_acquire}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhj/hMn ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj"0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$0modnameN classnameNjcjf)}ji]j/!c.raw_atomic64_sub_return_acquireasbuh1hhj0ubj=)}(h h]h }(hj@0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0ubh)}(hjh]hi}(hjN0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hji0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjk0modnameN classnameNjcjf)}ji]j/!c.raw_atomic64_sub_return_acquireasbuh1hhjb0ubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjb0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb0ubh)}(hjh]hv}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj0ubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhj/hMn ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhj/hMn ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhj/hMn hj/hhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn hj0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMn ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j0j4j0j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_sub_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj0ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj 1h]hs64 i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hj1ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj%1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!1hMo hj"1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj!1hMo hj1ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjE1h]h atomic64_t *v}(hjG1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hj?1ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj^1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZ1hMp hj[1ubah}(h]h ]h"]h$]h&]uh1jhj?1ubeh}(h]h ]h"]h$]h&]uh1jhjZ1hMp hj1ubeh}(h]h ]h"]h$]h&]uh1jhj0ubj9)}(h**Description**h]jz)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~1ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj0ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj1hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh to (}(hj1hhhNhNubjz)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh - }(hj1hhhNhNubjz)}(h**i**h]hi}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh) with acquire ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hj0ubj9)}(hLSafe to use in noinstr code; prefer atomic64_sub_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_sub_return_acquire() elsewhere.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hj0ubj9)}(h **Return**h]jz)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj0ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj2hhhNhNubjz)}(h**v**h]hv}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_release (C function)!c.raw_atomic64_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_sub_return_release (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_sub_return_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjF2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjH2modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_sub_return_releasesb!c.raw_atomic64_sub_return_releaseasbuh1hhj?2hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjh2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?2hhhjg2hM ubh)}(hraw_atomic64_sub_return_releaseh]h)}(hjd2h]hraw_atomic64_sub_return_release}(hjz2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?2hhhjg2hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jb2!c.raw_atomic64_sub_return_releaseasbuh1hhj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubh)}(hjh]hi}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jb2!c.raw_atomic64_sub_return_releaseasbuh1hhj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubj)}(hjh]h*}(hj 3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhj?2hhhjg2hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;2hhhjg2hM ubah}(h]j62ah ](jjeh"]h$]h&]jj)jhuh1hhjg2hM hj82hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjA3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj>3hhubah}(h]h ]h"]h$]h&]uh1jhj82hhhjg2hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jY3j4jY3j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_sub_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjc3h]h Parameters}(hje3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja3ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj3h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj|3ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj|3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjy3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj3h]h atomic64_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjy3ubeh}(h]h ]h"]h$]h&]uh1jhj]3ubj9)}(h**Description**h]jz)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj 4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 4ubh to (}(hj 4hhhNhNubjz)}(h**v**h]hv}(hj&4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 4ubh - }(hj 4hhhNhNubjz)}(h**i**h]hi}(hj84hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 4ubh) with release ordering.}(hj 4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubj9)}(hLSafe to use in noinstr code; prefer atomic64_sub_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_sub_return_release() elsewhere.}(hjQ4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubj9)}(h **Return**h]jz)}(hjb4h]hReturn}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`4ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjx4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx4ubh.}(hjx4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_sub_return_relaxed (C function)!c.raw_atomic64_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_sub_return_relaxed (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_sub_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj4modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_sub_return_relaxedsb!c.raw_atomic64_sub_return_relaxedasbuh1hhj4hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4hhhj4hM ubh)}(hraw_atomic64_sub_return_relaxedh]h)}(hj4h]hraw_atomic64_sub_return_relaxed}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhj4hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]j4!c.raw_atomic64_sub_return_relaxedasbuh1hhj5ubj=)}(h h]h }(hj,5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubh)}(hjh]hi}(hj:5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjU5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjW5modnameN classnameNjcjf)}ji]j4!c.raw_atomic64_sub_return_relaxedasbuh1hhjN5ubj=)}(h h]h }(hjs5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjN5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN5ubh)}(hjh]hv}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjN5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubeh}(h]h ]h"]h$]h&]jj uh1jhj4hhhj4hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhj4hM ubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhj4hM hj4hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_sub_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj5h]hs64 i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj 6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj 6hM hj5ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj16h]h atomic64_t *v}(hj36hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/6ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj+6ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjJ6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjF6hM hjG6ubah}(h]h ]h"]h$]h&]uh1jhj+6ubeh}(h]h ]h"]h$]h&]uh1jhjF6hM hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubj9)}(h**Description**h]jz)}(hjl6h]h Description}(hjn6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj6ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh to (}(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh - }(hj6hhhNhNubjz)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh) with relaxed ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj9)}(hLSafe to use in noinstr code; prefer atomic64_sub_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_sub_return_relaxed() elsewhere.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj9)}(h **Return**h]jz)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_sub (C function)c.raw_atomic64_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_sub (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_sub(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj27hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj47modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_subsbc.raw_atomic64_fetch_subasbuh1hhj+7hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjT7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+7hhhjS7hM ubh)}(hraw_atomic64_fetch_subh]h)}(hjP7h]hraw_atomic64_fetch_sub}(hjf7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj+7hhhjS7hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj7modnameN classnameNjcjf)}ji]jN7c.raw_atomic64_fetch_subasbuh1hhj}7ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}7ubh)}(hjh]hi}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjy7ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj7modnameN classnameNjcjf)}ji]jN7c.raw_atomic64_fetch_subasbuh1hhj7ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hjh]hv}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjy7ubeh}(h]h ]h"]h$]h&]jj uh1jhj+7hhhjS7hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'7hhhjS7hM ubah}(h]j"7ah ](jjeh"]h$]h&]jj)jhuh1hhjS7hM hj$7hhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj-8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj*8hhubah}(h]h ]h"]h$]h&]uh1jhj$7hhhjS7hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jE8j4jE8j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjO8h]h Parameters}(hjQ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM8ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjn8h]hs64 i}(hjp8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjl8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjh8ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhjh8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hje8ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj8h]h atomic64_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hje8ubeh}(h]h ]h"]h$]h&]uh1jhjI8ubj9)}(h**Description**h]jz)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj8hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh to (}(hj8hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh - }(hj8hhhNhNubjz)}(h**i**h]hi}(hj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh) with full ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.}(hj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubj9)}(h **Return**h]jz)}(hjN9h]hReturn}(hjP9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL9ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubj9)}(hThe original value of **v**.h](hThe original value of }(hjd9hhhNhNubjz)}(h**v**h]hv}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjd9ubh.}(hjd9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjI8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_acquire (C function) c.raw_atomic64_fetch_sub_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_sub_acquiresb c.raw_atomic64_fetch_sub_acquireasbuh1hhj9hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9hhhj9hM ubh)}(hraw_atomic64_fetch_sub_acquireh]h)}(hj9h]hraw_atomic64_fetch_sub_acquire}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9hhhj9hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9modnameN classnameNjcjf)}ji]j9 c.raw_atomic64_fetch_sub_acquireasbuh1hhj9ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubh)}(hjh]hi}(hj&:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjA:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjC:modnameN classnameNjcjf)}ji]j9 c.raw_atomic64_fetch_sub_acquireasbuh1hhj::ubj=)}(h h]h }(hj_:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj::ubj)}(hjh]h*}(hjm:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj::ubh)}(hjh]hv}(hjz:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj::ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj9ubeh}(h]h ]h"]h$]h&]jj uh1jhj9hhhj9hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj9hhhj9hM ubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1hhj9hM hj9hhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj:h]hs64 i}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj:hM hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM hj:ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj;h]h atomic64_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj;ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj6;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2;hM hj3;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj2;hM hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubj9)}(h**Description**h]jz)}(hjX;h]h Description}(hjZ;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjV;ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjn;hhhNhNubjz)}(h**v**h]hv}(hjv;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn;ubh to (}(hjn;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn;ubh - }(hjn;hhhNhNubjz)}(h**i**h]hi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn;ubh) with acquire ordering.}(hjn;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_acquire() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj9)}(h **Return**h]jz)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj9)}(hThe original value of **v**.h](hThe original value of }(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_release (C function) c.raw_atomic64_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj <modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_sub_releasesb c.raw_atomic64_fetch_sub_releaseasbuh1hhj<hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj@<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<hhhj?<hM ubh)}(hraw_atomic64_fetch_sub_releaseh]h)}(hj<<h]hraw_atomic64_fetch_sub_release}(hjR<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjN<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhj?<hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjp<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjm<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjr<modnameN classnameNjcjf)}ji]j:< c.raw_atomic64_fetch_sub_releaseasbuh1hhji<ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hji<ubh)}(hjh]hi}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhji<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hje<ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]j:< c.raw_atomic64_fetch_sub_releaseasbuh1hhj<ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hjh]hv}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hje<ubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhj?<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj<hhhj?<hM ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1hhj?<hM hj<hhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj?<hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1=j4j1=j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj;=h]h Parameters}(hj==hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9=ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjZ=h]hs64 i}(hj\=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjX=ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjT=ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjs=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjo=hM hjp=ubah}(h]h ]h"]h$]h&]uh1jhjT=ubeh}(h]h ]h"]h$]h&]uh1jhjo=hM hjQ=ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj=h]h atomic64_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj=ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjQ=ubeh}(h]h ]h"]h$]h&]uh1jhj5=ubj9)}(h**Description**h]jz)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj=hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh to (}(hj=hhhNhNubjz)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh - }(hj=hhhNhNubjz)}(h**i**h]hi}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubh) with release ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere.}(hj)>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubj9)}(h **Return**h]jz)}(hj:>h]hReturn}(hj<>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8>ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubj9)}(hThe original value of **v**.h](hThe original value of }(hjP>hhhNhNubjz)}(h**v**h]hv}(hjX>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP>ubh.}(hjP>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_sub_relaxed (C function) c.raw_atomic64_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj>modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_sub_relaxedsb c.raw_atomic64_fetch_sub_relaxedasbuh1hhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhj>hM ubh)}(hraw_atomic64_fetch_sub_relaxedh]h)}(hj>h]hraw_atomic64_fetch_sub_relaxed}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj>hM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj>modnameN classnameNjcjf)}ji]j> c.raw_atomic64_fetch_sub_relaxedasbuh1hhj>ubj=)}(h h]h }(hj?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hjh]hi}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj-?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/?modnameN classnameNjcjf)}ji]j> c.raw_atomic64_fetch_sub_relaxedasbuh1hhj&?ubj=)}(h h]h }(hjK?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&?ubj)}(hjh]h*}(hjY?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&?ubh)}(hjh]hv}(hjf?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>ubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhj>hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj>hM ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj>hM hj>hhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hj?h]hs64 i}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj @h]h atomic64_t *v}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj@ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hjD@h]h Description}(hjF@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB@ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjZ@hhhNhNubjz)}(h**v**h]hv}(hjb@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ@ubh to (}(hjZ@hhhNhNubjz)}(h**v**h]hv}(hjt@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ@ubh - }(hjZ@hhhNhNubjz)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ@ubh) with relaxed ordering.}(hjZ@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj9)}(h **Return**h]jz)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj9)}(hThe original value of **v**.h](hThe original value of }(hj@hhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_inc (C function)c.raw_atomic64_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h%void raw_atomic64_inc (atomic64_t *v)h]h)}(h$void raw_atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! ubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjAhM! ubh)}(hraw_atomic64_inch]h)}(hraw_atomic64_inch]hraw_atomic64_inc}(hj(AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$Aubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjAhM! ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjGAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjIAmodnameN classnameNjcjf)}ji]jl)}j_j*Asbc.raw_atomic64_incasbuh1hhj@Aubj=)}(h h]h }(hjgAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@Aubj)}(hjh]h*}(hjuAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Aubh)}(hjh]hv}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Aubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjhjAubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjAubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhM" hjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhM" hjAubah}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hj'Bh]h Description}(hj)BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%Bubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjAubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj=BhhhNhNubjz)}(h**v**h]hv}(hjEBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=Bubh to (}(hj=BhhhNhNubjz)}(h**v**h]hv}(hjWBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=Bubh + 1) with relaxed ordering.}(hj=BhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hjAubj9)}(h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.}(hjpBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM% hjAubj9)}(h **Return**h]jz)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM' hjAubj9)}(hNothing.h]hNothing.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM( hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_inc_return (C function)c.raw_atomic64_inc_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+s64 raw_atomic64_inc_return (atomic64_t *v)h]h)}(h*s64 raw_atomic64_inc_return(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjBmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_inc_returnsbc.raw_atomic64_inc_returnasbuh1hhjBhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 ubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBhhhjBhM5 ubh)}(hraw_atomic64_inc_returnh]h)}(hjBh]hraw_atomic64_inc_return}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ](jjeh"]h$]h&]jj uh1hhjBhhhjBhM5 ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jBc.raw_atomic64_inc_returnasbuh1hhjCubj=)}(h h]h }(hj9ChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCubj)}(hjh]h*}(hjGChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hjh]hv}(hjTChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubah}(h]h ]h"]h$]h&]jj uh1jhjBhhhjBhM5 ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjBhM5 ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhjBhM5 hjBhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj}ChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 hjzChhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhM5 ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic64_inc_return() elsewhere. **Return** The updated value of **v**.!h](j9)}(h**Parameters**h]jz)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjCubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjCh]h atomic64_t *v}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6 hjCubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChM6 hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM6 hjCubah}(h]h ]h"]h$]h&]uh1jhjCubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hjCubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjDhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh to (}(hjDhhhNhNubjz)}(h**v**h]hv}(hj)DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh + 1) with full ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hjCubj9)}(hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.}(hjBDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjCubj9)}(h **Return**h]jz)}(hjSDh]hReturn}(hjUDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQDubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjCubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjiDhhhNhNubjz)}(h**v**h]hv}(hjqDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiDubh.}(hjiDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_inc_return_acquire (C function)!c.raw_atomic64_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_acquire (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_inc_return_acquiresb!c.raw_atomic64_inc_return_acquireasbuh1hhjDhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO ubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDhhhjDhMO ubh)}(hraw_atomic64_inc_return_acquireh]h)}(hjDh]hraw_atomic64_inc_return_acquire}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhjDhhhjDhMO ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEmodnameN classnameNjcjf)}ji]jD!c.raw_atomic64_inc_return_acquireasbuh1hhjDubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDubj)}(hjh]h*}(hj+EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hjh]hv}(hj8EhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjDubah}(h]h ]h"]h$]h&]jj uh1jhjDhhhjDhMO ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjDhhhjDhMO ubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhjDhMO hjDhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjaEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO hj^Ehhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMO ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyEj4jyEj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic64_inc_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj}Eubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjEh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hjEubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjEhMP hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMP hjEubah}(h]h ]h"]h$]h&]uh1jhj}Eubj9)}(h**Description**h]jz)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hj}Eubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjEhhhNhNubjz)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh to (}(hjEhhhNhNubjz)}(h**v**h]hv}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubh + 1) with acquire ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hj}Eubj9)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_acquire() elsewhere.}(hj&FhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj}Eubj9)}(h **Return**h]jz)}(hj7Fh]hReturn}(hj9FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5Fubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hj}Eubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjMFhhhNhNubjz)}(h**v**h]hv}(hjUFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMFubh.}(hjMFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hj}Eubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_inc_return_release (C function)!c.raw_atomic64_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_release (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_inc_return_releasesb!c.raw_atomic64_inc_return_releaseasbuh1hhjFhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi ubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFhhhjFhMi ubh)}(hraw_atomic64_inc_return_releaseh]h)}(hjFh]hraw_atomic64_inc_return_release}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjFhMi ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jF!c.raw_atomic64_inc_return_releaseasbuh1hhjFubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hjh]hv}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjFubah}(h]h ]h"]h$]h&]jj uh1jhjFhhhjFhMi ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjFhhhjFhMi ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjFhMi hjFhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjEGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hjBGhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjFhMi ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]Gj4j]Gj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjgGh]h Parameters}(hjiGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeGubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjaGubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjGh]h atomic64_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjGubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMj hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMj hj}Gubah}(h]h ]h"]h$]h&]uh1jhjaGubj9)}(h**Description**h]jz)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hjaGubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjGhhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh to (}(hjGhhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh + 1) with release ordering.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjaGubj9)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_release() elsewhere.}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjaGubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hjaGubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj1HhhhNhNubjz)}(h**v**h]hv}(hj9HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1Hubh.}(hj1HhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjaGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_inc_return_relaxed (C function)!c.raw_atomic64_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_relaxed (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjuHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrHubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjwHmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_inc_return_relaxedsb!c.raw_atomic64_inc_return_relaxedasbuh1hhjnHhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnHhhhjHhM ubh)}(hraw_atomic64_inc_return_relaxedh]h)}(hjHh]hraw_atomic64_inc_return_relaxed}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnHhhhjHhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjHmodnameN classnameNjcjf)}ji]jH!c.raw_atomic64_inc_return_relaxedasbuh1hhjHubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hjh]hv}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubah}(h]h ]h"]h$]h&]jj uh1jhjnHhhhjHhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjHhhhjHhM ubah}(h]jeHah ](jjeh"]h$]h&]jj)jhuh1hhjHhM hjgHhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj)IhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&Ihhubah}(h]h ]h"]h$]h&]uh1jhjgHhhhjHhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAIj4jAIj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjKIh]h Parameters}(hjMIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIIubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjjIh]h atomic64_t *v}(hjlIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhIubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjdIubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjdIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjaIubah}(h]h ]h"]h$]h&]uh1jhjEIubj9)}(h**Description**h]jz)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjIhhhNhNubjz)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh to (}(hjIhhhNhNubjz)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh + 1) with relaxed ordering.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubj9)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubj9)}(h **Return**h]jz)}(hjIh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjJhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjEIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_inc (C function)c.raw_atomic64_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*s64 raw_atomic64_fetch_inc (atomic64_t *v)h]h)}(h)s64 raw_atomic64_fetch_inc(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjYJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVJubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[JmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_incsbc.raw_atomic64_fetch_incasbuh1hhjRJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj{JhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRJhhhjzJhM ubh)}(hraw_atomic64_fetch_inch]h)}(hjwJh]hraw_atomic64_fetch_inc}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhjRJhhhjzJhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]juJc.raw_atomic64_fetch_incasbuh1hhjJubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hjh]hv}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJubah}(h]h ]h"]h$]h&]jj uh1jhjRJhhhjzJhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNJhhhjzJhM ubah}(h]jIJah ](jjeh"]h$]h&]jj)jhuh1hhjzJhM hjKJhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Khhubah}(h]h ]h"]h$]h&]uh1jhjKJhhhjzJhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j%Kj4j%Kj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj/Kh]h Parameters}(hj1KhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Kubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjNKh]h atomic64_t *v}(hjPKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLKubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHKubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjgKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjcKhM hjdKubah}(h]h ]h"]h$]h&]uh1jhjHKubeh}(h]h ]h"]h$]h&]uh1jhjcKhM hjEKubah}(h]h ]h"]h$]h&]uh1jhj)Kubj9)}(h**Description**h]jz)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjKhhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh to (}(hjKhhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh + 1) with full ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubj9)}(h **Return**h]jz)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubj9)}(hThe original value of **v**.h](hThe original value of }(hjKhhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj)Kubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_acquire (C function) c.raw_atomic64_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_inc_acquire (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_inc_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj=LhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:Lubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj?LmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_inc_acquiresb c.raw_atomic64_fetch_inc_acquireasbuh1hhj6Lhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj_LhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6Lhhhj^LhM ubh)}(hraw_atomic64_fetch_inc_acquireh]h)}(hj[Lh]hraw_atomic64_fetch_inc_acquire}(hjqLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmLubah}(h]h ](jjeh"]h$]h&]jj uh1hhj6Lhhhj^LhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjLmodnameN classnameNjcjf)}ji]jYL c.raw_atomic64_fetch_inc_acquireasbuh1hhjLubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hv}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubah}(h]h ]h"]h$]h&]jj uh1jhj6Lhhhj^LhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj2Lhhhj^LhM ubah}(h]j-Lah ](jjeh"]h$]h&]jj)jhuh1hhj^LhM hj/Lhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLhhubah}(h]h ]h"]h$]h&]uh1jhj/Lhhhj^LhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Mj4j Mj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_inc_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj2Mh]h atomic64_t *v}(hj4MhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0Mubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj,Mubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjKMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGMhM hjHMubah}(h]h ]h"]h$]h&]uh1jhj,Mubeh}(h]h ]h"]h$]h&]uh1jhjGMhM hj)Mubah}(h]h ]h"]h$]h&]uh1jhj Mubj9)}(h**Description**h]jz)}(hjmMh]h Description}(hjoMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkMubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh to (}(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh + 1) with acquire ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_inc_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_inc_acquire() elsewhere.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubj9)}(h **Return**h]jz)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubj9)}(hThe original value of **v**.h](hThe original value of }(hjMhhhNhNubjz)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj Mubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_release (C function) c.raw_atomic64_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_inc_release (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_inc_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj!NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj#NmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_inc_releasesb c.raw_atomic64_fetch_inc_releaseasbuh1hhjNhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjCNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNhhhjBNhM ubh)}(hraw_atomic64_fetch_inc_releaseh]h)}(hj?Nh]hraw_atomic64_fetch_inc_release}(hjUNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhjBNhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjsNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpNubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjuNmodnameN classnameNjcjf)}ji]j=N c.raw_atomic64_fetch_inc_releaseasbuh1hhjlNubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlNubh)}(hjh]hv}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlNubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjhNubah}(h]h ]h"]h$]h&]jj uh1jhjNhhhjBNhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjNhhhjBNhM ubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1hhjBNhM hjNhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjBNhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jNj4jNj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_inc_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjOh]h atomic64_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/OhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+OhM hj,Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj+OhM hj Oubah}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hjQOh]h Description}(hjSOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOOubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjgOhhhNhNubjz)}(h**v**h]hv}(hjoOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgOubh to (}(hjgOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgOubh + 1) with release ordering.}(hjgOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_inc_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_inc_release() elsewhere.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj9)}(h **Return**h]jz)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj9)}(hThe original value of **v**.h](hThe original value of }(hjOhhhNhNubjz)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_inc_relaxed (C function) c.raw_atomic64_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_inc_relaxed (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_inc_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_inc_relaxedsb c.raw_atomic64_fetch_inc_relaxedasbuh1hhjOhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj'PhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOhhhj&PhM ubh)}(hraw_atomic64_fetch_inc_relaxedh]h)}(hj#Ph]hraw_atomic64_fetch_inc_relaxed}(hj9PhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5Pubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhj&PhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjWPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYPmodnameN classnameNjcjf)}ji]j!P c.raw_atomic64_fetch_inc_relaxedasbuh1hhjPPubj=)}(h h]h }(hjuPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPPubh)}(hjh]hv}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLPubah}(h]h ]h"]h$]h&]jj uh1jhjOhhhj&PhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhj&PhM ubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1hhj&PhM hjOhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhj&PhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_inc_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjPh]h atomic64_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubj9)}(h**Description**h]jz)}(hj5Qh]h Description}(hj7QhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Qubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjKQhhhNhNubjz)}(h**v**h]hv}(hjSQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKQubh to (}(hjKQhhhNhNubjz)}(h**v**h]hv}(hjeQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKQubh + 1) with relaxed ordering.}(hjKQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_inc_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_inc_relaxed() elsewhere.}(hj~QhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj9)}(h **Return**h]jz)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj9)}(hThe original value of **v**.h](hThe original value of }(hjQhhhNhNubjz)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_dec (C function)c.raw_atomic64_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h%void raw_atomic64_dec (atomic64_t *v)h]h)}(h$void raw_atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQhhhjQhM ubh)}(hraw_atomic64_dech]h)}(hraw_atomic64_dech]hraw_atomic64_dec}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjQhM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj&RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Rubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(RmodnameN classnameNjcjf)}ji]jl)}j_j Rsbc.raw_atomic64_decasbuh1hhjRubj=)}(h h]h }(hjFRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubj)}(hjh]h*}(hjTRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hjh]hv}(hjaRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjRubah}(h]h ]h"]h$]h&]jj uh1jhjQhhhjQhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhjQhM ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjQhM hjQhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_dec() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjRh]h atomic64_t *v}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhM hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM hjRubah}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjShhhNhNubjz)}(h**v**h]hv}(hj$ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubh to (}(hjShhhNhNubjz)}(h**v**h]hv}(hj6ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubh - 1) with relaxed ordering.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj9)}(h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.}(hjOShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj9)}(h **Return**h]jz)}(hj`Sh]hReturn}(hjbShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^Subah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubj9)}(hNothing.h]hNothing.}(hjvShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_dec_return (C function)c.raw_atomic64_dec_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+s64 raw_atomic64_dec_return (atomic64_t *v)h]h)}(h*s64 raw_atomic64_dec_return(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_dec_returnsbc.raw_atomic64_dec_returnasbuh1hhjShhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhjShM ubh)}(hraw_atomic64_dec_returnh]h)}(hjSh]hraw_atomic64_dec_return}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjShM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jSc.raw_atomic64_dec_returnasbuh1hhjSubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubj)}(hjh]h*}(hj&ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hjh]hv}(hj3ThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubah}(h]h ]h"]h$]h&]jj uh1jhjShhhjShM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjShhhjShM ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1hhjShM hjShhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj\ThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjYThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtTj4jtTj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic64_dec_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj~Th]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|Tubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjTh]h atomic64_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjxTubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjThhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh to (}(hjThhhNhNubjz)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh - 1) with full ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubj9)}(hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.}(hj!UhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubj9)}(h **Return**h]jz)}(hj2Uh]hReturn}(hj4UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0Uubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjHUhhhNhNubjz)}(h**v**h]hv}(hjPUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHUubh.}(hjHUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjxTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_acquire (C function)!c.raw_atomic64_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_dec_return_acquire (atomic64_t *v)h]h)}(h2s64 raw_atomic64_dec_return_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_dec_return_acquiresb!c.raw_atomic64_dec_return_acquireasbuh1hhjUhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) ubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUhhhjUhM) ubh)}(hraw_atomic64_dec_return_acquireh]h)}(hjUh]hraw_atomic64_dec_return_acquire}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjUhM) ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jU!c.raw_atomic64_dec_return_acquireasbuh1hhjUubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hjh]hv}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubah}(h]h ]h"]h$]h&]jj uh1jhjUhhhjUhM) ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjUhM) ubah}(h]j|Uah ](jjeh"]h$]h&]jj)jhuh1hhjUhM) hj~Uhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj@VhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) hj=Vhhubah}(h]h ]h"]h$]h&]uh1jhj~UhhhjUhM) ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jXVj4jXVj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic64_dec_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjbVh]h Parameters}(hjdVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`Vubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj\Vubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjVh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM* hj{Vubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhM* hjVubah}(h]h ]h"]h$]h&]uh1jhj{Vubeh}(h]h ]h"]h$]h&]uh1jhjVhM* hjxVubah}(h]h ]h"]h$]h&]uh1jhj\Vubj9)}(h**Description**h]jz)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hj\Vubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjVhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh to (}(hjVhhhNhNubjz)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh - 1) with acquire ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj\Vubj9)}(hLSafe to use in noinstr code; prefer atomic64_dec_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_dec_return_acquire() elsewhere.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj\Vubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hj\Vubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj,WhhhNhNubjz)}(h**v**h]hv}(hj4WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Wubh.}(hj,WhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hj\Vubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_release (C function)!c.raw_atomic64_dec_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_dec_return_release (atomic64_t *v)h]h)}(h2s64 raw_atomic64_dec_return_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjpWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmWubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjrWmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_dec_return_releasesb!c.raw_atomic64_dec_return_releaseasbuh1hhjiWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC ubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjiWhhhjWhMC ubh)}(hraw_atomic64_dec_return_releaseh]h)}(hjWh]hraw_atomic64_dec_return_release}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ](jjeh"]h$]h&]jj uh1hhjiWhhhjWhMC ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjWmodnameN classnameNjcjf)}ji]jW!c.raw_atomic64_dec_return_releaseasbuh1hhjWubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hjh]hv}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjWubah}(h]h ]h"]h$]h&]jj uh1jhjiWhhhjWhMC ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjeWhhhjWhMC ubah}(h]j`Wah ](jjeh"]h$]h&]jj)jhuh1hhjWhMC hjbWhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj$XhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hj!Xhhubah}(h]h ]h"]h$]h&]uh1jhjbWhhhjWhMC ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhjcXubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD hj_Xubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~XhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjzXhMD hj{Xubah}(h]h ]h"]h$]h&]uh1jhj_Xubeh}(h]h ]h"]h$]h&]uh1jhjzXhMD hj\Xubah}(h]h ]h"]h$]h&]uh1jhj@Xubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hOhMF hj@Xubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjXhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh to (}(hjXhhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh - 1) with release ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hj@Xubj9)}(hLSafe to use in noinstr code; prefer atomic64_dec_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_dec_return_release() elsewhere.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hj@Xubj9)}(h **Return**h]jz)}(hjXh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hj@Xubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjYhhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj@Xubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic64_dec_return_relaxed (C function)!c.raw_atomic64_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_dec_return_relaxed (atomic64_t *v)h]h)}(h2s64 raw_atomic64_dec_return_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjTYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVYmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_dec_return_relaxedsb!c.raw_atomic64_dec_return_relaxedasbuh1hhjMYhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ ubj=)}(h h]h }(hjvYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMYhhhjuYhM\ ubh)}(hraw_atomic64_dec_return_relaxedh]h)}(hjrYh]hraw_atomic64_dec_return_relaxed}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMYhhhjuYhM\ ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jpY!c.raw_atomic64_dec_return_relaxedasbuh1hhjYubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hjh]hv}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjYubah}(h]h ]h"]h$]h&]jj uh1jhjMYhhhjuYhM\ ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIYhhhjuYhM\ ubah}(h]jDYah ](jjeh"]h$]h&]jj)jhuh1hhjuYhM\ hjFYhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ hjZhhubah}(h]h ]h"]h$]h&]uh1jhjFYhhhjuYhM\ ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Zj4j Zj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_dec_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj*Zh]h Parameters}(hj,ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(Zubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM` hj$Zubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjIZh]h atomic64_t *v}(hjKZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGZubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM] hjCZubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^ZhM] hj_Zubah}(h]h ]h"]h$]h&]uh1jhjCZubeh}(h]h ]h"]h$]h&]uh1jhj^ZhM] hj@Zubah}(h]h ]h"]h$]h&]uh1jhj$Zubj9)}(h**Description**h]jz)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_ hj$Zubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh to (}(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh - 1) with relaxed ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^ hj$Zubj9)}(hLSafe to use in noinstr code; prefer atomic64_dec_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_dec_return_relaxed() elsewhere.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM` hj$Zubj9)}(h **Return**h]jz)}(hjZh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMb hj$Zubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjZhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hj$Zubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_dec (C function)c.raw_atomic64_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h*s64 raw_atomic64_fetch_dec (atomic64_t *v)h]h)}(h)s64 raw_atomic64_fetch_dec(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj8[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:[modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_decsbc.raw_atomic64_fetch_decasbuh1hhj1[hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr ubj=)}(h h]h }(hjZ[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1[hhhjY[hMr ubh)}(hraw_atomic64_fetch_dech]h)}(hjV[h]hraw_atomic64_fetch_dec}(hjl[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh[ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1[hhhjY[hMr ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[modnameN classnameNjcjf)}ji]jT[c.raw_atomic64_fetch_decasbuh1hhj[ubj=)}(h h]h }(hj[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hjh]hv}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubah}(h]h ]h"]h$]h&]jj uh1jhj1[hhhjY[hMr ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-[hhhjY[hMr ubah}(h]j([ah ](jjeh"]h$]h&]jj)jhuh1hhjY[hMr hj*[hhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj[hhubah}(h]h ]h"]h$]h&]uh1jhj*[hhhjY[hMr ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j\j4j\j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj \ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj\ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj-\h]h atomic64_t *v}(hj/\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+\ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hj'\ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjF\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjB\hMs hjC\ubah}(h]h ]h"]h$]h&]uh1jhj'\ubeh}(h]h ]h"]h$]h&]uh1jhjB\hMs hj$\ubah}(h]h ]h"]h$]h&]uh1jhj\ubj9)}(h**Description**h]jz)}(hjh\h]h Description}(hjj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf\ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj\ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj~\hhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~\ubh to (}(hj~\hhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~\ubh - 1) with full ordering.}(hj~\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hj\ubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_dec() elsewhere.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj\ubj9)}(h **Return**h]jz)}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hj\ubj9)}(hThe original value of **v**.h](hThe original value of }(hj\hhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_acquire (C function) c.raw_atomic64_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_dec_acquire (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_dec_acquire(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj]modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_dec_acquiresb c.raw_atomic64_fetch_dec_acquireasbuh1hhj]hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj>]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]hhhj=]hM ubh)}(hraw_atomic64_fetch_dec_acquireh]h)}(hj:]h]hraw_atomic64_fetch_dec_acquire}(hjP]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhj=]hM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjn]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjk]ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjp]modnameN classnameNjcjf)}ji]j8] c.raw_atomic64_fetch_dec_acquireasbuh1hhjg]ubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjg]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg]ubh)}(hjh]hv}(hj]hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjc]ubah}(h]h ]h"]h$]h&]jj uh1jhj]hhhj=]hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj]hhhj=]hM ubah}(h]j ]ah ](jjeh"]h$]h&]jj)jhuh1hhj=]hM hj]hhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj=]hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j]j4j]j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_dec_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj^h]h atomic64_t *v}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ^ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj*^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&^hM hj'^ubah}(h]h ]h"]h$]h&]uh1jhj ^ubeh}(h]h ]h"]h$]h&]uh1jhj&^hM hj^ubah}(h]h ]h"]h$]h&]uh1jhj]ubj9)}(h**Description**h]jz)}(hjL^h]h Description}(hjN^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ^ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjb^hhhNhNubjz)}(h**v**h]hv}(hjj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb^ubh to (}(hjb^hhhNhNubjz)}(h**v**h]hv}(hj|^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb^ubh - 1) with acquire ordering.}(hjb^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_dec_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_dec_acquire() elsewhere.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubj9)}(h **Return**h]jz)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubj9)}(hThe original value of **v**.h](hThe original value of }(hj^hhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_release (C function) c.raw_atomic64_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_dec_release (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_dec_release(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj_modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_dec_releasesb c.raw_atomic64_fetch_dec_releaseasbuh1hhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj"_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhj!_hM ubh)}(hraw_atomic64_fetch_dec_releaseh]h)}(hj_h]hraw_atomic64_fetch_dec_release}(hj4_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0_ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj!_hM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjR_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjT_modnameN classnameNjcjf)}ji]j_ c.raw_atomic64_fetch_dec_releaseasbuh1hhjK_ubj=)}(h h]h }(hjp_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjK_ubj)}(hjh]h*}(hj~_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK_ubh)}(hjh]hv}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjG_ubah}(h]h ]h"]h$]h&]jj uh1jhj^hhhj!_hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj!_hM ubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhj!_hM hj^hhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj!_hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_dec_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj_h]h atomic64_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj `hM hj `ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj `hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hj0`h]h Description}(hj2`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjF`hhhNhNubjz)}(h**v**h]hv}(hjN`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF`ubh to (}(hjF`hhhNhNubjz)}(h**v**h]hv}(hj``hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF`ubh - 1) with release ordering.}(hjF`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_dec_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_dec_release() elsewhere.}(hjy`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj9)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_dec_relaxed (C function) c.raw_atomic64_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_dec_relaxed (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_dec_relaxed(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj`modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_dec_relaxedsb c.raw_atomic64_fetch_dec_relaxedasbuh1hhj`hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`hhhjahM ubh)}(hraw_atomic64_fetch_dec_relaxedh]h)}(hjah]hraw_atomic64_fetch_dec_relaxed}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`hhhjahM ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj6ahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3aubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8amodnameN classnameNjcjf)}ji]ja c.raw_atomic64_fetch_dec_relaxedasbuh1hhj/aubj=)}(h h]h }(hjTahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/aubj)}(hjh]h*}(hjbahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/aubh)}(hjh]hv}(hjoahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/aubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj+aubah}(h]h ]h"]h$]h&]jj uh1jhj`hhhjahM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`hhhjahM ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhjahM hj`hhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjahM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjah]h atomic64_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjaubj9)}(h**Description**h]jz)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj*bhhhNhNubjz)}(h**v**h]hv}(hj2bhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*bubh to (}(hj*bhhhNhNubjz)}(h**v**h]hv}(hjDbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*bubh - 1) with relaxed ordering.}(hj*bhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_dec_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_dec_relaxed() elsewhere.}(hj]bhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj9)}(h **Return**h]jz)}(hjnbh]hReturn}(hjpbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlbubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubj9)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_and (C function)c.raw_atomic64_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void raw_atomic64_and (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_and(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbhhhjbhM ubh)}(hraw_atomic64_andh]h)}(hraw_atomic64_andh]hraw_atomic64_and}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjbhhhjbhM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjcmodnameN classnameNjcjf)}ji]jl)}j_jbsbc.raw_atomic64_andasbuh1hhjbubj=)}(h h]h }(hj%chhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubh)}(hjh]hi}(hj3chhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjNchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPcmodnameN classnameNjcjf)}ji]j!cc.raw_atomic64_andasbuh1hhjGcubj=)}(h h]h }(hjlchhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGcubj)}(hjh]h*}(hjzchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGcubh)}(hjh]hv}(hjchhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGcubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubeh}(h]h ]h"]h$]h&]jj uh1jhjbhhhjbhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjbhhhjbhM ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhjbhM hjbhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jcj4jcj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_and() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjch]hs64 i}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjcubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhM hjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjdhM hjcubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj*dh]h atomic64_t *v}(hj,dhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(dubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$dubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjCdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?dhM hj@dubah}(h]h ]h"]h$]h&]uh1jhj$dubeh}(h]h ]h"]h$]h&]uh1jhj?dhM hjcubeh}(h]h ]h"]h$]h&]uh1jhjcubj9)}(h**Description**h]jz)}(hjedh]h Description}(hjgdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj{dhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{dubh to (}(hj{dhhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{dubh & }(hj{dhhhNhNubjz)}(h**i**h]hi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{dubh) with relaxed ordering.}(hj{dhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj9)}(h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj9)}(h **Return**h]jz)}(hjdh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj9)}(hNothing.h]hNothing.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_and (C function)c.raw_atomic64_fetch_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_and (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_and(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_andsbc.raw_atomic64_fetch_andasbuh1hhjehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj;ehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhj:ehM ubh)}(hraw_atomic64_fetch_andh]h)}(hj7eh]hraw_atomic64_fetch_and}(hjMehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIeubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhj:ehM ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjkehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjheubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmemodnameN classnameNjcjf)}ji]j5ec.raw_atomic64_fetch_andasbuh1hhjdeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdeubh)}(hjh]hi}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`eubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjemodnameN classnameNjcjf)}ji]j5ec.raw_atomic64_fetch_andasbuh1hhjeubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjeubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hjh]hv}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjeubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`eubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhj:ehM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhj:ehM ubah}(h]j eah ](jjeh"]h$]h&]jj)jhuh1hhj:ehM hj ehhubj )}(hhh]j9)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfhhubah}(h]h ]h"]h$]h&]uh1jhj ehhhj:ehM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j,fj4j,fj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_and() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj6fh]h Parameters}(hj8fhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4fubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjUfh]hs64 i}(hjWfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjOfubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjnfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjfhM hjkfubah}(h]h ]h"]h$]h&]uh1jhjOfubeh}(h]h ]h"]h$]h&]uh1jhjjfhM hjLfubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjfh]h atomic64_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjLfubeh}(h]h ]h"]h$]h&]uh1jhj0fubj9)}(h**Description**h]jz)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjfhhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh to (}(hjfhhhNhNubjz)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh & }(hjfhhhNhNubjz)}(h**i**h]hi}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh) with full ordering.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.}(hj$ghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubj9)}(h **Return**h]jz)}(hj5gh]hReturn}(hj7ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3gubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubj9)}(hThe original value of **v**.h](hThe original value of }(hjKghhhNhNubjz)}(h**v**h]hv}(hjSghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKgubh.}(hjKghhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj0fubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_and_acquire (C function) c.raw_atomic64_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjgmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_and_acquiresb c.raw_atomic64_fetch_and_acquireasbuh1hhjghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjghhhjghMubh)}(hraw_atomic64_fetch_and_acquireh]h)}(hjgh]hraw_atomic64_fetch_and_acquire}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjghMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjgmodnameN classnameNjcjf)}ji]jg c.raw_atomic64_fetch_and_acquireasbuh1hhjgubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubh)}(hjh]hi}(hj hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj(hhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%hubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj*hmodnameN classnameNjcjf)}ji]jg c.raw_atomic64_fetch_and_acquireasbuh1hhj!hubj=)}(h h]h }(hjFhhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!hubj)}(hjh]h*}(hjThhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hubh)}(hjh]hv}(hjahhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!hubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjgubeh}(h]h ]h"]h$]h&]jj uh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhjghMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1hhjghMhjghhubj )}(hhh]j9)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhj4jhj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjhh]hs64 i}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjih]h atomic64_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hj?ih]h Description}(hjAihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=iubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjUihhhNhNubjz)}(h**v**h]hv}(hj]ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUiubh to (}(hjUihhhNhNubjz)}(h**v**h]hv}(hjoihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUiubh & }(hjUihhhNhNubjz)}(h**i**h]hi}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUiubh) with acquire ordering.}(hjUihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_and_acquire() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj9)}(hThe original value of **v**.h](hThe original value of }(hjihhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_and_release (C function) c.raw_atomic64_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_and_releasesb c.raw_atomic64_fetch_and_releaseasbuh1hhjihhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj'jhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhj&jhMubh)}(hraw_atomic64_fetch_and_releaseh]h)}(hj#jh]hraw_atomic64_fetch_and_release}(hj9jhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5jubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhj&jhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjWjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYjmodnameN classnameNjcjf)}ji]j!j c.raw_atomic64_fetch_and_releaseasbuh1hhjPjubj=)}(h h]h }(hjujhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPjubh)}(hjh]hi}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]j!j c.raw_atomic64_fetch_and_releaseasbuh1hhjjubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hjh]hv}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLjubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhj&jhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhj&jhMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1hhj&jhMhjihhubj )}(hhh]j9)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhj&jhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_and_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj"kh]h Parameters}(hj$khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj kubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjkubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjAkh]hs64 i}(hjCkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?kubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj;kubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjZkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVkhMhjWkubah}(h]h ]h"]h$]h&]uh1jhj;kubeh}(h]h ]h"]h$]h&]uh1jhjVkhMhj8kubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjzkh]h atomic64_t *v}(hj|khhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxkubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtkubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjtkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhj8kubeh}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjkubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh to (}(hjkhhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh & }(hjkhhhNhNubjz)}(h**i**h]hi}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh) with release ordering.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjkubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_and_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_and_release() elsewhere.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjkubj9)}(h **Return**h]jz)}(hj!lh]hReturn}(hj#lhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjkubj9)}(hThe original value of **v**.h](hThe original value of }(hj7lhhhNhNubjz)}(h**v**h]hv}(hj?lhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7lubh.}(hj7lhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_and_relaxed (C function) c.raw_atomic64_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj{lhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj}lmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_and_relaxedsb c.raw_atomic64_fetch_and_relaxedasbuh1hhjtlhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjtlhhhjlhM6ubh)}(hraw_atomic64_fetch_and_relaxedh]h)}(hjlh]hraw_atomic64_fetch_and_relaxed}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjtlhhhjlhM6ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjlmodnameN classnameNjcjf)}ji]jl c.raw_atomic64_fetch_and_relaxedasbuh1hhjlubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubh)}(hjh]hi}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl c.raw_atomic64_fetch_and_relaxedasbuh1hhj mubj=)}(h h]h }(hj2mhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj mubj)}(hjh]h*}(hj@mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj mubh)}(hjh]hv}(hjMmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj mubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubeh}(h]h ]h"]h$]h&]jj uh1jhjtlhhhjlhM6ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjplhhhjlhM6ubah}(h]jklah ](jjeh"]h$]h&]jj)jhuh1hhjlhM6hjmlhhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjvmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjsmhhubah}(h]h ]h"]h$]h&]uh1jhjmlhhhjlhM6ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jmj4jmj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_and_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjmubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjmh]hs64 i}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjmubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhM7hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhM7hjmubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjmh]h atomic64_t *v}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjmubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjmubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhM8hjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjnhM8hjmubeh}(h]h ]h"]h$]h&]uh1jhjmubj9)}(h**Description**h]jz)}(hj+nh]h Description}(hj-nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)nubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjmubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjAnhhhNhNubjz)}(h**v**h]hv}(hjInhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAnubh to (}(hjAnhhhNhNubjz)}(h**v**h]hv}(hj[nhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAnubh & }(hjAnhhhNhNubjz)}(h**i**h]hi}(hjmnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAnubh) with relaxed ordering.}(hjAnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.h%hM9hjmubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_and_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_and_relaxed() elsewhere.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjmubj9)}(h **Return**h]jz)}(hjnh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjmubj9)}(hThe original value of **v**.h](hThe original value of }(hjnhhhNhNubjz)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic64_andnot (C function)c.raw_atomic64_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h/void raw_atomic64_andnot (s64 i, atomic64_t *v)h]h)}(h.void raw_atomic64_andnot(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnhhhjnhMMubh)}(hraw_atomic64_andnoth]h)}(hraw_atomic64_andnoth]hraw_atomic64_andnot}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj oubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjnhMMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj.ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+oubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj0omodnameN classnameNjcjf)}ji]jl)}j_josbc.raw_atomic64_andnotasbuh1hhj'oubj=)}(h h]h }(hjNohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'oubh)}(hjh]hi}(hj\ohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'oubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj#oubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjwohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtoubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjyomodnameN classnameNjcjf)}ji]jJoc.raw_atomic64_andnotasbuh1hhjpoubj=)}(h h]h }(hjohhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpoubh)}(hjh]hv}(hjohhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpoubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj#oubeh}(h]h ]h"]h$]h&]jj uh1jhjnhhhjnhMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjnhhhjnhMMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1hhjnhMMhjnhhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3joj4joj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_andnot() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjoubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjph]hs64 i}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjpubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj3phhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/phMNhj0pubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhj/phMNhjpubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjSph]h atomic64_t *v}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjMpubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhphMOhjipubah}(h]h ]h"]h$]h&]uh1jhjMpubeh}(h]h ]h"]h$]h&]uh1jhjhphMOhjpubeh}(h]h ]h"]h$]h&]uh1jhjoubj9)}(h**Description**h]jz)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjoubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjphhhNhNubjz)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh to (}(hjphhhNhNubjz)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh & }(hjphhhNhNubjz)}(h**~i**h]h~i}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh) with relaxed ordering.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjoubj9)}(h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.h]h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjoubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjoubj9)}(hNothing.h]hNothing.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_fetch_andnot (C function)c.raw_atomic64_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4s64 raw_atomic64_fetch_andnot (s64 i, atomic64_t *v)h]h)}(h3s64 raw_atomic64_fetch_andnot(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjBqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?qubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDqmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_andnotsbc.raw_atomic64_fetch_andnotasbuh1hhj;qhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbubj=)}(h h]h }(hjdqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;qhhhjcqhMbubh)}(hraw_atomic64_fetch_andnoth]h)}(hj`qh]hraw_atomic64_fetch_andnot}(hjvqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrqubah}(h]h ](jjeh"]h$]h&]jj uh1hhj;qhhhjcqhMbubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjqmodnameN classnameNjcjf)}ji]j^qc.raw_atomic64_fetch_andnotasbuh1hhjqubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubh)}(hjh]hi}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjqmodnameN classnameNjcjf)}ji]j^qc.raw_atomic64_fetch_andnotasbuh1hhjqubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hjh]hv}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjqubeh}(h]h ]h"]h$]h&]jj uh1jhj;qhhhjcqhMbubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7qhhhjcqhMbubah}(h]j2qah ](jjeh"]h$]h&]jj)jhuh1hhjcqhMbhj4qhhubj )}(hhh]j9)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hj=rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbhj:rhhubah}(h]h ]h"]h$]h&]uh1jhj4qhhhjcqhMbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jUrj4jUrj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj_rh]h Parameters}(hjarhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]rubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjYrubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj~rh]hs64 i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|rubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchjxrubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMchjrubah}(h]h ]h"]h$]h&]uh1jhjxrubeh}(h]h ]h"]h$]h&]uh1jhjrhMchjurubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjrh]h atomic64_t *v}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjrubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMdhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMdhjurubeh}(h]h ]h"]h$]h&]uh1jhjYrubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjYrubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjshhhNhNubjz)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh to (}(hjshhhNhNubjz)}(h**v**h]hv}(hj"shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh & }(hjshhhNhNubjz)}(h**~i**h]h~i}(hj4shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubh) with full ordering.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjYrubj9)}(hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.}(hjMshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjYrubj9)}(h **Return**h]jz)}(hj^sh]hReturn}(hj`shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\subah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjYrubj9)}(hThe original value of **v**.h](hThe original value of }(hjtshhhNhNubjz)}(h**v**h]hv}(hj|shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtsubh.}(hjtshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjYrubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_fetch_andnot_acquire (C function)#c.raw_atomic64_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjtubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjtubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj uhM~hj uubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj uhM~hjtubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj-uh]h atomic64_t *v}(hj/uhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+uubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj'uubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjFuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBuhMhjCuubah}(h]h ]h"]h$]h&]uh1jhj'uubeh}(h]h ]h"]h$]h&]uh1jhjBuhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjhuh]h Description}(hjjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfuubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj~uhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~uubh to (}(hj~uhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~uubh & }(hj~uhhhNhNubjz)}(h**~i**h]h~i}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~uubh) with acquire ordering.}(hj~uhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_acquire() elsewhere.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(h **Return**h]jz)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubj9)}(hThe original value of **v**.h](hThe original value of }(hjuhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_fetch_andnot_release (C function)#c.raw_atomic64_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjhwubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdwubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjdwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjawubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjwh]h atomic64_t *v}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjawubeh}(h]h ]h"]h$]h&]uh1jhjEwubj9)}(h**Description**h]jz)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEwubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjwhhhNhNubjz)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh to (}(hjwhhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh & }(hjwhhhNhNubjz)}(h**~i**h]h~i}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubh) with release ordering.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEwubj9)}(hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_release() elsewhere.}(hj9xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEwubj9)}(h **Return**h]jz)}(hjJxh]hReturn}(hjLxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHxubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEwubj9)}(hThe original value of **v**.h](hThe original value of }(hj`xhhhNhNubjz)}(h**v**h]hv}(hjhxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`xubh.}(hj`xhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjEwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_fetch_andnot_relaxed (C function)#c.raw_atomic64_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjyubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjyubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjzh]h atomic64_t *v}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj2zhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.zhMhj/zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj.zhMhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjTzh]h Description}(hjVzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRzubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjjzhhhNhNubjz)}(h**v**h]hv}(hjrzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjzubh to (}(hjjzhhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjzubh & }(hjjzhhhNhNubjz)}(h**~i**h]h~i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjzubh) with relaxed ordering.}(hjjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj9)}(hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_relaxed() elsewhere.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj9)}(h **Return**h]jz)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj9)}(hThe original value of **v**.h](hThe original value of }(hjzhhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_or (C function)c.raw_atomic64_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+void raw_atomic64_or (s64 i, atomic64_t *v)h]h)}(h*void raw_atomic64_or(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj&{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{hhhj%{hMubh)}(hraw_atomic64_orh]h)}(hraw_atomic64_orh]hraw_atomic64_or}(hj8{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhj%{hMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjW{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjT{ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjY{modnameN classnameNjcjf)}ji]jl)}j_j:{sbc.raw_atomic64_orasbuh1hhjP{ubj=)}(h h]h }(hjw{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjP{ubh)}(hjh]hi}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjL{ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj{modnameN classnameNjcjf)}ji]js{c.raw_atomic64_orasbuh1hhj{ubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hjh]hv}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjL{ubeh}(h]h ]h"]h$]h&]jj uh1jhj{hhhj%{hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj%{hMubah}(h]j {ah ](jjeh"]h$]h&]jj)jhuh1hhj%{hMhj {hhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1jhj {hhhj%{hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j|j4j|j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_or() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj$|h]h Parameters}(hj&|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"|ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjC|h]hs64 i}(hjE|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA|ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj=|ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj\|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX|hMhjY|ubah}(h]h ]h"]h$]h&]uh1jhj=|ubeh}(h]h ]h"]h$]h&]uh1jhjX|hMhj:|ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj||h]h atomic64_t *v}(hj~|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjz|ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjv|ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhjv|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj:|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubj9)}(h**Description**h]jz)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj|hhhNhNubjz)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh to (}(hj|hhhNhNubjz)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh | }(hj|hhhNhNubjz)}(h**i**h]hi}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh) with relaxed ordering.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj9)}(hhj~ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj~ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj~h]h atomic64_t *v}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj~ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj1hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh to (}(hj1hhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh | }(hj1hhhNhNubjz)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh) with full ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj9)}(hBSafe to use in noinstr code; prefer atomic64_fetch_or() elsewhere.h]hBSafe to use in noinstr code; prefer atomic64_fetch_or() elsewhere.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic64_fetch_or_acquire (C function)c.raw_atomic64_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 raw_atomic64_fetch_or_acquire (s64 i, atomic64_t *v)h]h)}(h7s64 raw_atomic64_fetch_or_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_or_acquiresbc.raw_atomic64_fetch_or_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic64_fetch_or_acquireh]h)}(hjh]hraw_atomic64_fetch_or_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5modnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_or_acquireasbuh1hhj,ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubh)}(hjh]hi}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjzhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj|modnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_or_acquireasbuh1hhjsubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjـhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_or_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjVh]h atomic64_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjPubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjӁhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hJSafe to use in noinstr code; prefer atomic64_fetch_or_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_or_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic64_fetch_or_release (C function)c.raw_atomic64_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 raw_atomic64_fetch_or_release (s64 i, atomic64_t *v)h]h)}(h7s64 raw_atomic64_fetch_or_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_or_releasesbc.raw_atomic64_fetch_or_releaseasbuh1hhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPhhhjxhMubh)}(hraw_atomic64_fetch_or_releaseh]h)}(hjuh]hraw_atomic64_fetch_or_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhjxhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jsc.raw_atomic64_fetch_or_releaseasbuh1hhjubj=)}(h h]h }(hjǂhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjՂhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jsc.raw_atomic64_fetch_or_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjPhhhjxhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjxhMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhjIhhubj )}(hhh]j9)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjxhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj̃h]h atomic64_t *v}(hj΃hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjʃubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƃubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƃubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj9)}(hJSafe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_or_release() elsewhere.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj9)}(h **Return**h]jz)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic64_fetch_or_relaxed (C function)c.raw_atomic64_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8s64 raw_atomic64_fetch_or_relaxed (s64 i, atomic64_t *v)h]h)}(h7s64 raw_atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj̈́hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjʄubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjτmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_or_relaxedsbc.raw_atomic64_fetch_or_relaxedasbuh1hhjƄhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjƄhhhjhM*ubh)}(hraw_atomic64_fetch_or_relaxedh]h)}(hjh]hraw_atomic64_fetch_or_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjƄhhhjhM*ubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj!modnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_or_relaxedasbuh1hhjubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjhmodnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_or_relaxedasbuh1hhj_ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjƄhhhjhM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj„hhhjhM*ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM*hjhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjȅhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjŅhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM*ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj h]hs64 i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjBh]h atomic64_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hj<ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjWhM,hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh | }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubj9)}(hJSafe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_or_relaxed() elsewhere.}(hj؆hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_xor (C function)c.raw_atomic64_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h,void raw_atomic64_xor (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_xor(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAubj=)}(h h]h }(hjOhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<hhhjNhMAubh)}(hraw_atomic64_xorh]h)}(hraw_atomic64_xorh]hraw_atomic64_xor}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj<hhhjNhMAubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jcsbc.raw_atomic64_xorasbuh1hhjyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjɇhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjƇubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjˇmodnameN classnameNjcjf)}ji]jc.raw_atomic64_xorasbuh1hhj‡ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj‡ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj‡ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj‡ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubeh}(h]h ]h"]h$]h&]jj uh1jhj<hhhjNhMAubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhjNhMAubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1hhjNhMAhj5hhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj(hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjNhMAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_xor() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjGubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjlh]hs64 i}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjfubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjcubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjcubeh}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjވubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjGubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjGubj9)}(h=Safe to use in noinstr code; prefer atomic64_xor() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_xor() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjGubj9)}(h **Return**h]jz)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMHhjGubj9)}(hNothing.h]hNothing.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic64_fetch_xor (C function)c.raw_atomic64_fetch_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1s64 raw_atomic64_fetch_xor (s64 i, atomic64_t *v)h]h)}(h0s64 raw_atomic64_fetch_xor(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_xorsbc.raw_atomic64_fetch_xorasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMRubh)}(hraw_atomic64_fetch_xorh]h)}(hjh]hraw_atomic64_fetch_xor}(hjȉhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjĉubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMRubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_xorasbuh1hhj߉ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj߉ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߉ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjۉubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_xorasbuh1hhj&ubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hjh]hv}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjۉubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMRhjhhubj )}(hhh]j9)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjЊh]hs64 i}(hjҊhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjΊubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjʊubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjʊubeh}(h]h ]h"]h$]h&]uh1jhjhMShjNJubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjNJubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjZhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh to (}(hjZhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh ^ }(hjZhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh) with full ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjubj9)}(hCSafe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjƋhhhNhNubjz)}(h**v**h]hv}(hj΋hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƋubh.}(hjƋhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_xor_acquire (C function) c.raw_atomic64_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_acquire(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_xor_acquiresb c.raw_atomic64_fetch_xor_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj+hMmubh)}(hraw_atomic64_fetch_xor_acquireh]h)}(hj(h]hraw_atomic64_fetch_xor_acquire}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj+hMmubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]j& c.raw_atomic64_fetch_xor_acquireasbuh1hhjUubj=)}(h h]h }(hjzhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j& c.raw_atomic64_fetch_xor_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjόhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj܌hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj+hMmubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj+hMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj+hMmhjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMmubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj!ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjFh]hs64 i}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhj@ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMnhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMnhj=ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjyubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMohjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMohj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhj!ubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjЍhhhNhNubjz)}(h**v**h]hv}(hj؍hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЍubh to (}(hjЍhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЍubh ^ }(hjЍhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjЍubh) with acquire ordering.}(hjЍhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphj!ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhj!ubj9)}(h **Return**h]jz)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthj!ubj9)}(hThe original value of **v**.h](hThe original value of }(hj<hhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_xor_release (C function) c.raw_atomic64_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_release(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_xor_releasesb c.raw_atomic64_fetch_xor_releaseasbuh1hhjyhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyhhhjhMubh)}(hraw_atomic64_fetch_xor_releaseh]h)}(hjh]hraw_atomic64_fetch_xor_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjyhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjҎhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjώubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjԎmodnameN classnameNjcjf)}ji]j c.raw_atomic64_fetch_xor_releaseasbuh1hhjˎubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjˎubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjˎubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjǎubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.raw_atomic64_fetch_xor_releaseasbuh1hhjubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjǎubeh}(h]h ]h"]h$]h&]jj uh1jhjyhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjuhhhjhMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjrhhubj )}(hhh]j9)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjՏhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjяhMhjҏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjяhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh to (}(hjFhhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh ^ }(hjFhhhNhNubjz)}(h**i**h]hi}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh) with release ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+raw_atomic64_fetch_xor_relaxed (C function) c.raw_atomic64_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_xor_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_xor_relaxedsb c.raw_atomic64_fetch_xor_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic64_fetch_xor_relaxedh]h)}(hjh]hraw_atomic64_fetch_xor_relaxed}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]j c.raw_atomic64_fetch_xor_relaxedasbuh1hhjAubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(hjh]hi}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.raw_atomic64_fetch_xor_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjȑhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]j?)}(hj2h]hs64 i}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj)}(hhh]j9)}(h s64 valueh]h s64 value}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj)ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjkh]h atomic64_t *v}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjĒhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj֒hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh ^ }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj9)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj9)}(hThe original value of **v**.h](hThe original value of }(hj(hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic64_xchg (C function)c.raw_atomic64_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.s64 raw_atomic64_xchg (atomic64_t *v, s64 new)h]h)}(h-s64 raw_atomic64_xchg(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjnmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_xchgsbc.raw_atomic64_xchgasbuh1hhjehhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhjhMubh)}(hraw_atomic64_xchgh]h)}(hjh]hraw_atomic64_xchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjhMubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_xchgasbuh1hhjubj=)}(h h]h }(hjܓhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_xchgasbuh1hhj ubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hnewh]hnew}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjehhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj^hhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjehhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with full ordering. Safe to use in noinstr code; prefer atomic64_xchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj”hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjܔubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjܔubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hj3hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh to }(hj3hhhNhNubjz)}(h**new**h]hnew}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh with full ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_xchg() elsewhere.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_acquire (C function)c.raw_atomic64_xchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 raw_atomic64_xchg_acquire (atomic64_t *v, s64 new)h]h)}(h5s64 raw_atomic64_xchg_acquire(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjѕhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjΕubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjӕmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_xchg_acquiresbc.raw_atomic64_xchg_acquireasbuh1hhjʕhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjʕhhhjhMubh)}(hraw_atomic64_xchg_acquireh]h)}(hjh]hraw_atomic64_xchg_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjʕhhhjhMubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj%modnameN classnameNjcjf)}ji]jc.raw_atomic64_xchg_acquireasbuh1hhjubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjymodnameN classnameNjcjf)}ji]jc.raw_atomic64_xchg_acquireasbuh1hhjpubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjʕhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjƕhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjÕhhubj )}(hhh]j9)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hj͖hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʖhhubah}(h]h ]h"]h$]h&]uh1jhjÕhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with acquire ordering. Safe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjGh]hs64 new}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.}(hj˗hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjܗh]hReturn}(hjޗhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڗubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_release (C function)c.raw_atomic64_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 raw_atomic64_xchg_release (atomic64_t *v, s64 new)h]h)}(h5s64 raw_atomic64_xchg_release(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_xchg_releasesbc.raw_atomic64_xchg_releaseasbuh1hhj/hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjXhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/hhhjWhMubh)}(hraw_atomic64_xchg_releaseh]h)}(hjTh]hraw_atomic64_xchg_release}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhjWhMubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jRc.raw_atomic64_xchg_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj}ubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjܘhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj٘ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjޘmodnameN classnameNjcjf)}ji]jRc.raw_atomic64_xchg_releaseasbuh1hhj՘ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj՘ubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj՘ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj}ubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhjWhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhjWhMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhjWhMhj(hhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjWhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jJj4jJj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with release ordering. Safe to use in noinstr code; prefer atomic64_xchg_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjsh]h atomic64_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjmubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjřhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhj™ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(h **Return**h]jz)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubj9)}(hThe original value of **v**.h](hThe original value of }(hjWhhhNhNubjz)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_xchg_relaxed (C function)c.raw_atomic64_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6s64 raw_atomic64_xchg_relaxed (atomic64_t *v, s64 new)h]h)}(h5s64 raw_atomic64_xchg_relaxed(atomic64_t *v, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_xchg_relaxedsbc.raw_atomic64_xchg_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hraw_atomic64_xchg_relaxedh]h)}(hjh]hraw_atomic64_xchg_relaxed}(hjϚhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj˚ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h(atomic64_t *v, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_xchg_relaxedasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jc.raw_atomic64_xchg_relaxedasbuh1hhj:ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubh)}(hnewh]hnew}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM hjhhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Safe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj؛h]h atomic64_t *v}(hjڛhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj֛ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjқubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjқubeh}(h]h ]h"]h$]h&]uh1jhjhM hjϛubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjϛubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjbhhhNhNubjz)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh to }(hjbhhhNhNubjz)}(h**new**h]hnew}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubh with relaxed ordering.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj9)}(hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjĜhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic64_cmpxchg (C function)c.raw_atomic64_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_cmpxchg (atomic64_t *v, s64 old, s64 new)h]h)}(h9s64 raw_atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_cmpxchgsbc.raw_atomic64_cmpxchgasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj!hM ubh)}(hraw_atomic64_cmpxchgh]h)}(hjh]hraw_atomic64_cmpxchg}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hM ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTmodnameN classnameNjcjf)}ji]jc.raw_atomic64_cmpxchgasbuh1hhjKubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_cmpxchgasbuh1hhjubj=)}(h h]h }(hjĝhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjҝhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_cmpxchgasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjGubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj!hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj!hM hjhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j\j4j\j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj`ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hj|ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjמhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjӞhM"hjԞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjӞhM"hj|ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM#hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM#hj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hj`ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjHhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh == }(hjHhhhNhNubjz)}(h**old**h]hold}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh), atomically updates }(hjHhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh to }(hjHhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh with full ordering. Otherwise, }(hjHhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh2 is not modified and relaxed ordering is provided.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj`ubj9)}(hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hj`ubj9)}(h **Return**h]jz)}(hjŸh]hReturn}(hjğhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hj`ubj9)}(hThe original value of **v**.h](hThe original value of }(hj؟hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj؟ubh.}(hj؟hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_acquire (C function)c.raw_atomic64_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_acquire (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_cmpxchg_acquiresbc.raw_atomic64_cmpxchg_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj=hM=ubh)}(hraw_atomic64_cmpxchg_acquireh]h)}(hj:h]hraw_atomic64_cmpxchg_acquire}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj=hM=ubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]j8c.raw_atomic64_cmpxchg_acquireasbuh1hhjgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjĠmodnameN classnameNjcjf)}ji]j8c.raw_atomic64_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]j8c.raw_atomic64_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjcubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj=hM=ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj=hM=ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj=hM=hjhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj=hM=ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jxj4jxj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj|ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjڡh]hs64 old}(hjܡhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjءubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjԡubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjԡubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hj ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hM@hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM@hjubeh}(h]h ]h"]h$]h&]uh1jhj|ubj9)}(h**Description**h]jz)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj|ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjdhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh == }(hjdhhhNhNubjz)}(h**old**h]hold}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh), atomically updates }(hjdhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh to }(hjdhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh# with acquire ordering. Otherwise, }(hjdhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh2 is not modified and relaxed ordering is provided.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj|ubj9)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.}(hj͢hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhj|ubj9)}(h **Return**h]jz)}(hjޢh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܢubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhj|ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_release (C function)c.raw_atomic64_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_release (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_cmpxchg_releasesbc.raw_atomic64_cmpxchg_releaseasbuh1hhj1hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1hhhjYhMZubh)}(hraw_atomic64_cmpxchg_releaseh]h)}(hjVh]hraw_atomic64_cmpxchg_release}(hjlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjYhMZubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jTc.raw_atomic64_cmpxchg_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjãhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hjޣhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjۣubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jTc.raw_atomic64_cmpxchg_releaseasbuh1hhjףubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjףubh)}(holdh]hold}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjףubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj(modnameN classnameNjcjf)}ji]jTc.raw_atomic64_cmpxchg_releaseasbuh1hhjubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj1hhhjYhMZubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjYhMZubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhjYhMZhj*hhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjyhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjYhMZubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj֤hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjҤhM[hjӤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҤhM[hjubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM\hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM\hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj/h]hs64 new}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hj)ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhM]hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with release ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjХhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjubj9)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_cmpxchg_relaxed (C function)c.raw_atomic64_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_relaxed (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]h)}(hs64h]hs64}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_cmpxchg_relaxedsbc.raw_atomic64_cmpxchg_relaxedasbuh1hhjMhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMhhhjuhMvubh)}(hraw_atomic64_cmpxchg_relaxedh]h)}(hjrh]hraw_atomic64_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjMhhhjuhMvubj )}(h!(atomic64_t *v, s64 old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jpc.raw_atomic64_cmpxchg_relaxedasbuh1hhjubj=)}(h h]h }(hjĦhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjҦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjߦhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 oldh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jpc.raw_atomic64_cmpxchg_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(holdh]hold}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjDmodnameN classnameNjcjf)}ji]jpc.raw_atomic64_cmpxchg_relaxedasbuh1hhj;ubj=)}(h h]h }(hj`hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubh)}(hnewh]hnew}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjMhhhjuhMvubeh}(h]h ]h"]h$]h&]jj juh1hjjhjIhhhjuhMvubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1hhjuhMvhjFhhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhjhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjuhMvubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj٧h]h atomic64_t *v}(hjۧhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjקubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhjӧubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjӧubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjЧubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]j?)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhj ubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMxhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMxhjЧubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjKh]hs64 new}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMyhjEubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMyhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMyhjЧubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjȨhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjڨhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjubj9)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj,hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic64_try_cmpxchg (C function)c.raw_atomic64_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@bool raw_atomic64_try_cmpxchg (atomic64_t *v, s64 *old, s64 new)h]h)}(h?bool raw_atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjihhhjzhMubh)}(hraw_atomic64_try_cmpxchgh]h)}(hraw_atomic64_try_cmpxchgh]hraw_atomic64_try_cmpxchg}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjihhhjzhMubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic64_try_cmpxchgasbuh1hhjubj=)}(h h]h }(hj̩hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjکhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jȩc.raw_atomic64_try_cmpxchgasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjYmodnameN classnameNjcjf)}ji]jȩc.raw_atomic64_try_cmpxchgasbuh1hhjPubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjPubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjihhhjzhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjehhhjzhMubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1hhjzhMhjbhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jŪj4jŪj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjϪh]h Parameters}(hjѪhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjͪubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hj'h]hs64 *old}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj!ubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj`h]hs64 new}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjZubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubeh}(h]h ]h"]h$]h&]uh1jhjɪubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hj˫hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjݫhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubj9)}(hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubj9)}(h **Return**h]jz)}(hjOh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh if the exchange occurred, }(hjehhhNhNubjz)}(h **false**h]hfalse}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubh otherwise.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɪubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_acquire (C function)"c.raw_atomic64_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_acquire (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj¬hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_acquireh]h)}(h raw_atomic64_try_cmpxchg_acquireh]h raw_atomic64_try_cmpxchg_acquire}(hjԬhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjЬubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_j֬sb"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjBubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hnewh]hnew}(hjʭhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj5h]h atomic64_t *v}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj/ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjnh]hs64 *old}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj¯hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_release (C function)"c.raw_atomic64_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_release (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_releaseh]h)}(h raw_atomic64_try_cmpxchg_releaseh]h raw_atomic64_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_jsb"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj3ubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jV"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(holdh]hold}(hjɰhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jV"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjްubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjްubh)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjްubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jSj4jSj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj|h]h atomic64_t *v}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjh]hs64 *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjαhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjʱhMhj˱ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʱhMhjsubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubeh}(h]h ]h"]h$]h&]uh1jhjWubj9)}(h**Description**h]jz)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj?hhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh == }(hj?hhhNhNubjz)}(h**old**h]hold}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh), atomically updates }(hj?hhhNhNubjz)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh to }(hj?hhhNhNubjz)}(h**new**h]hnew}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh# with release ordering. Otherwise, }(hj?hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh is not modified, }(hj?hhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh$ is updated to the current value of }(hj?hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh#, and relaxed ordering is provided.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere.}(hj̲hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(h **Return**h]jz)}(hjݲh]hReturn}(hj߲hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj۲ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the exchange occurred, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_try_cmpxchg_relaxed (C function)"c.raw_atomic64_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_relaxed (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhjOhMubh)}(h raw_atomic64_try_cmpxchg_relaxedh]h)}(h raw_atomic64_try_cmpxchg_relaxedh]h raw_atomic64_try_cmpxchg_relaxed}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhjOhMubj )}(h"(atomic64_t *v, s64 *old, s64 new)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jdsb"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjzubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjvubj&)}(hs64 *oldh](h)}(hhh]h)}(hs64h]hs64}(hj׳hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjԳubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjٳmodnameN classnameNjcjf)}ji]j"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjгubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjгubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjгubh)}(holdh]hold}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjгubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjvubj&)}(hs64 newh](h)}(hhh]h)}(hs64h]hs64}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj.modnameN classnameNjcjf)}ji]j"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhj%ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubh)}(hnewh]hnew}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjvubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhjOhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhjOhMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1hhjOhMhj7hhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjOhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjôh]h atomic64_t *v}(hjŴhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjܴhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjشhMhjٴubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjشhMhjubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]j?)}(hjh]hs64 *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]j?)}(hj5h]hs64 new}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj/ubj)}(hhh]j9)}(hs64 value to assignh]hs64 value to assign}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh == }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**new**h]hnew}(hjĵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjֵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is not modified, }(hjhhhNhNubjz)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh$ is updated to the current value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh if the exchange occurred, }(hj:hhhNhNubjz)}(h **false**h]hfalse}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh otherwise.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_sub_and_test (C function)c.raw_atomic64_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_sub_and_test (s64 i, atomic64_t *v)h]h)}(h4bool raw_atomic64_sub_and_test(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic64_sub_and_testh]h)}(hraw_atomic64_sub_and_testh]hraw_atomic64_sub_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hjȶhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjŶubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjʶmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic64_sub_and_testasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_sub_and_testasbuh1hhj ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhj~hhubj )}(hhh]j9)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjphhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXJ**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to subtracth]hs64 value to subtract}(hjͷhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjɷhMhjʷubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɷhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj>hhhNhNubjz)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh to (}(hj>hhhNhNubjz)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh - }(hj>hhhNhNubjz)}(h**i**h]hi}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh) with full ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is zero, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjҸhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_dec_and_test (C function)c.raw_atomic64_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_dec_and_test (atomic64_t *v)h]h)}(h-bool raw_atomic64_dec_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM'ubh)}(hraw_atomic64_dec_and_testh]h)}(hraw_atomic64_dec_and_testh]hraw_atomic64_dec_and_test}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM'ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjLmodnameN classnameNjcjf)}ji]jl)}j_j-sbc.raw_atomic64_dec_and_testasbuh1hhjCubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj?ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM'hjhhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jƹj4jƹj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic64_dec_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjйh]h Parameters}(hjҹhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjιubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjʹubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjʹubj9)}(h**Description**h]jz)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjʹubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj@hhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh to (}(hj@hhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubh - 1) with full ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjʹubj9)}(hFSafe to use in noinstr code; prefer atomic64_dec_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_dec_and_test() elsewhere.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjʹubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjʹubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is zero, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjºhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjʹubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_inc_and_test (C function)c.raw_atomic64_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_inc_and_test (atomic64_t *v)h]h)}(h-bool raw_atomic64_inc_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM;ubh)}(hraw_atomic64_inc_and_testh]h)}(hraw_atomic64_inc_and_testh]hraw_atomic64_inc_and_test}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM;ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic64_inc_and_testasbuh1hhj3ubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM;ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM;ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM;hjhhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM;ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic64_inc_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj»hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj߻h]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjݻubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjٻubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjٻubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjֻubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj0hhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh to (}(hj0hhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh + 1) with full ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjubj9)}(hFSafe to use in noinstr code; prefer atomic64_inc_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_inc_and_test() elsewhere.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is zero, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_add_negative (C function)c.raw_atomic64_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_add_negative (s64 i, atomic64_t *v)h]h)}(h4bool raw_atomic64_add_negative(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMOubh)}(hraw_atomic64_add_negativeh]h)}(hraw_atomic64_add_negativeh]hraw_atomic64_add_negative}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMOubj )}(h(s64 i, atomic64_t *v)h](j&)}(hs64 ih](h)}(hhh]h)}(hs64h]hs64}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_j sbc.raw_atomic64_add_negativeasbuh1hhj#ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#ubh)}(hjh]hi}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjumodnameN classnameNjcjf)}ji]jFc.raw_atomic64_add_negativeasbuh1hhjlubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMOubah}(h]j޼ah ](jjeh"]h$]h&]jj)jhuh1hhjhMOhjhhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjսhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjҽhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXI**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_add_negative() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]j?)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hMPhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMPhj ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjOh]h atomic64_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjIubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMQhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMQhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj̾hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubj9)}(hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if the resulting value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh is negative, }(hj hhhNhNubjz)}(h **false**h]hfalse}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_add_negative_acquire (C function)#c.raw_atomic64_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_acquire (s64 i, atomic64_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjubeh}(h]h ]h"]h$]h&]uh1jhjsubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjsubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj"hhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh to (}(hj"hhhNhNubjz)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh + }(hj"hhhNhNubjz)}(h**i**h]hi}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh) with acquire ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjsubj9)}(hNSafe to use in noinstr code; prefer atomic64_add_negative_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_add_negative_acquire() elsewhere.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjsubj9)}(h **Return**h]jz)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhjsubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_add_negative_release (C function)#c.raw_atomic64_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_release (s64 i, atomic64_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjSh]h atomic64_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic64_add_negative_relaxed (C function)#c.raw_atomic64_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_relaxed (s64 i, atomic64_t *v)h]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj&hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh to (}(hj&hhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh + }(hj&hhhNhNubjz)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh) with relaxed ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj9)}(hNSafe to use in noinstr code; prefer atomic64_add_negative_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_add_negative_relaxed() elsewhere.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj9)}(h **Return**h]jz)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ*raw_atomic64_fetch_add_unless (C function)c.raw_atomic64_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h?s64 raw_atomic64_fetch_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h>s64 raw_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_fetch_add_unlesssbc.raw_atomic64_fetch_add_unlessasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic64_fetch_add_unlessh]h)}(hjh]hraw_atomic64_fetch_add_unless}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic64_t *v, s64 a, s64 u)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_add_unlessasbuh1hhjAubj=)}(h h]h }(hjfhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_fetch_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjyh]h atomic64_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjsubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]j?)}(hjh]hs64 a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]j?)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubj9)}(h**Description**h]jz)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj<hhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh != }(hj<hhhNhNubjz)}(h**u**h]hu}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh), atomically updates }(hj<hhhNhNubjz)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh to (}(hj<hhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh + }(hj<hhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh!) with full ordering. Otherwise, }(hj<hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubh2 is not modified and relaxed ordering is provided.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(hJSafe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere.h]hJSafe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic64_add_unless (C function)c.raw_atomic64_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:bool raw_atomic64_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h9bool raw_atomic64_add_unless(atomic64_t *v, s64 a, s64 u)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hj-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj,hMubh)}(hraw_atomic64_add_unlessh]h)}(hraw_atomic64_add_unlessh]hraw_atomic64_add_unless}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj,hMubj )}(h(atomic64_t *v, s64 a, s64 u)h](j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj`modnameN classnameNjcjf)}ji]jl)}j_jAsbc.raw_atomic64_add_unlessasbuh1hhjWubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hs64 ah](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jzc.raw_atomic64_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hs64 uh](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jzc.raw_atomic64_add_unlessasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj,hMhjhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jhj4jhj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_add_unless() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]j?)}(hjh]hs64 a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]j?)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j9)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubj9)}(h**Description**h]jz)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjThhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh != }(hjThhhNhNubjz)}(h**u**h]hu}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh), atomically updates }(hjThhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh to (}(hjThhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh + }(hjThhhNhNubjz)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh!) with full ordering. Otherwise, }(hjThhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh2 is not modified and relaxed ordering is provided.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj9)}(hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic64_inc_not_zero (C function)c.raw_atomic64_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_inc_not_zero (atomic64_t *v)h]h)}(h-bool raw_atomic64_inc_not_zero(atomic64_t *v)h](j)}(hjh]hbool}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjShhhjdhMubh)}(hraw_atomic64_inc_not_zeroh]h)}(hraw_atomic64_inc_not_zeroh]hraw_atomic64_inc_not_zero}(hjwhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjShhhjdhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jysbc.raw_atomic64_inc_not_zeroasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjShhhjdhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjOhhhjdhMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1hhjdhMhjLhhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXd**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hj;h]h atomic64_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj5ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% + 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh was updated, }(hj hhhNhNubjz)}(h **false**h]hfalse}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_inc_unless_negative (C function)"c.raw_atomic64_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_inc_unless_negative (atomic64_t *v)h]h)}(h4bool raw_atomic64_inc_unless_negative(atomic64_t *v)h](j)}(hjh]hbool}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjghhhjxhMubh)}(h raw_atomic64_inc_unless_negativeh]h)}(h raw_atomic64_inc_unless_negativeh]h raw_atomic64_inc_unless_negative}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjghhhjxhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb"c.raw_atomic64_inc_unless_negativeasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjghhhjxhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjchhhjxhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhjxhMhj`hhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjxhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj:hNhNubjp)}(hXk**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjOh]h atomic64_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh >= 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% + 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj9)}(hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic64_dec_unless_positive (C function)"c.raw_atomic64_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h4bool raw_atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{hhhjhMubh)}(h raw_atomic64_dec_unless_positiveh]h)}(h raw_atomic64_dec_unless_positiveh]h raw_atomic64_dec_unless_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{hhhjhMubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb"c.raw_atomic64_dec_unless_positiveasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjthhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhj:hNhNubjp)}(hXk**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj>ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjch]h atomic64_t *v}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj]ubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj>ubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh <= 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj>ubj9)}(hMSafe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hj>ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hj>ubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh if }(hj2hhhNhNubjz)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh was updated, }(hj2hhhNhNubjz)}(h **false**h]hfalse}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh otherwise.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic64_dec_if_positive (C function)c.raw_atomic64_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h0s64 raw_atomic64_dec_if_positive (atomic64_t *v)h]h)}(h/s64 raw_atomic64_dec_if_positive(atomic64_t *v)h](h)}(hhh]h)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_raw_atomic64_dec_if_positivesbc.raw_atomic64_dec_if_positiveasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM8ubh)}(hraw_atomic64_dec_if_positiveh]h)}(hjh]hraw_atomic64_dec_if_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM8ubj )}(h(atomic64_t *v)h]j&)}(h atomic64_t *vh](h)}(hhh]h)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.raw_atomic64_dec_if_positiveasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM8ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM8hjhhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM8ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jbj4jbj5j6j7uh1hhhhj:hNhNubjp)}(hXy**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_dec_if_positive() elsewhere. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjfubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]j?)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9hjubj)}(hhh]j9)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjfubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjfubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh > 0), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjfubj9)}(hISafe to use in noinstr code; prefer atomic64_dec_if_positive() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_dec_if_positive() elsewhere.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjfubj9)}(h **Return**h]jz)}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjfubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjZhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh - 1), regardless of whether }(hjZhhhNhNubjz)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh was updated.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_long_read (C function)c.raw_atomic_long_readhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_read (const atomic_long_t *v)h]h)}(h1long raw_atomic_long_read(const atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hraw_atomic_long_readh]h)}(hraw_atomic_long_readh]hraw_atomic_long_read}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(const atomic_long_t *v)h]j&)}(hconst atomic_long_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_readasbuh1hhjubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``const atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically loads the value of **v** with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_read() elsewhere. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]j?)}(hjh]hconst atomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_read_acquire (C function)c.raw_atomic_long_read_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_read_acquire (const atomic_long_t *v)h]h)}(h9long raw_atomic_long_read_acquire(const atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhK-ubh)}(hraw_atomic_long_read_acquireh]h)}(hraw_atomic_long_read_acquireh]hraw_atomic_long_read_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhK-ubj )}(h(const atomic_long_t *v)h]j&)}(hconst atomic_long_t *vh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_read_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhK-ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK-ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhK-hj|hhubj )}(hhh]j9)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-hjChhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhK-ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j^j4j^j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``const atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically loads the value of **v** with acquire ordering. Safe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere. **Return** The value loaded from **v**.h](j9)}(h**Parameters**h]jz)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjbubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]j?)}(hjh]hconst atomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK.hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK0hjbubj9)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK/hjbubj9)}(hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjbubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK3hjbubj9)}(hThe value loaded from **v**.h](hThe value loaded from }(hj hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK4hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_set (C function)c.raw_atomic_long_sethNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_set (atomic_long_t *v, long i)h]h)}(h2void raw_atomic_long_set(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]hhhjohKAubh)}(hraw_atomic_long_seth]h)}(hraw_atomic_long_seth]hraw_atomic_long_set}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj]hhhjohKAubj )}(h(atomic_long_t *v, long i)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_setasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj]hhhjohKAubeh}(h]h ]h"]h$]h&]jj juh1hjjhjYhhhjohKAubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1hhjohKAhjVhhubj )}(hhh]j9)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAhj6hhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohKAubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jQj4jQj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_set() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjUubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjzh]hatomic_long_t *v}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKBhjtubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKBhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjqubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKChjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKChjqubeh}(h]h ]h"]h$]h&]uh1jhjUubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjUubj9)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKDhjUubj9)}(h@Safe to use in noinstr code; prefer atomic_long_set() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_set() elsewhere.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKFhjUubj9)}(h **Return**h]jz)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKHhjUubj9)}(hNothing.h]hNothing.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKIhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_long_set_release (C function)c.raw_atomic_long_set_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h;void raw_atomic_long_set_release (atomic_long_t *v, long i)h]h)}(h:void raw_atomic_long_set_release(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKVubh)}(hraw_atomic_long_set_releaseh]h)}(hraw_atomic_long_set_releaseh]hraw_atomic_long_set_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKVubj )}(h(atomic_long_t *v, long i)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_set_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ih](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKVubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKVhjhhubj )}(hhh]j9)}(h atomic set with release orderingh]h atomic set with release ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVhjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKVubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j}j4j}j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with release ordering. Safe to use in noinstr code; prefer atomic_long_set_release() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKWhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhjubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKXhjubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubj9)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj0hhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh to }(hj0hhhNhNubjz)}(h**i**h]hi}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh with release ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKYhjubj9)}(hHSafe to use in noinstr code; prefer atomic_long_set_release() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_long_set_release() elsewhere.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK[hjubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK]hjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_add (C function)c.raw_atomic_long_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_add (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_add(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKkubh)}(hraw_atomic_long_addh]h)}(hraw_atomic_long_addh]hraw_atomic_long_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKkubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_addasbuh1hhj&ubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hjh]hv}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKkubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKkubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKkhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKkubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_add() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKlhjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKmhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKmhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKmhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj\hhhNhNubjz)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh to (}(hj\hhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh + }(hj\hhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubh) with relaxed ordering.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKnhjubj9)}(h@Safe to use in noinstr code; prefer atomic_long_add() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKphjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKrhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKshjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_add_return (C function)c.raw_atomic_long_add_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_add_return (long i, atomic_long_t *v)h]h)}(h9long raw_atomic_long_add_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hraw_atomic_long_add_returnh]h)}(hraw_atomic_long_add_returnh]hraw_atomic_long_add_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0ubh)}(hjh]hi}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_add_returnasbuh1hhjdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_add_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjIh]hatomic_long_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjCubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hGSafe to use in noinstr code; prefer atomic_long_add_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_add_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_acquire (C function)$c.raw_atomic_long_add_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_acquire (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjUhKubh)}(h"raw_atomic_long_add_return_acquireh]h)}(h"raw_atomic_long_add_return_acquireh]h"raw_atomic_long_add_return_acquire}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjUhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jjsb$c.raw_atomic_long_add_return_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj|ubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhjUhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj?hhhjUhKubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhjUhKhj<hhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j7j4j7j5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj`h]hlong i}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjZubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjWubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubj9)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubj9)}(h **Return**h]jz)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjVhhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_release (C function)$c.raw_atomic_long_add_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_release (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h"raw_atomic_long_add_return_releaseh]h)}(h"raw_atomic_long_add_return_releaseh]h"raw_atomic_long_add_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsb$c.raw_atomic_long_add_return_releaseasbuh1hhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjlhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hj:hhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh to (}(hj:hhhNhNubjz)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh + }(hj:hhhNhNubjz)}(h**i**h]hi}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh) with release ordering.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_add_return_relaxed (C function)$c.raw_atomic_long_add_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_relaxed (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h"raw_atomic_long_add_return_relaxedh]h)}(h"raw_atomic_long_add_return_relaxedh]h"raw_atomic_long_add_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hjh]hi}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj]modnameN classnameNjcjf)}ji]jl)}j_j sb$c.raw_atomic_long_add_return_relaxedasbuh1hhjTubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjTubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj9h]hatomic_long_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj3ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_add (C function)c.raw_atomic_long_fetch_addhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_add (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_add(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhjEhKubh)}(hraw_atomic_long_fetch_addh]h)}(hraw_atomic_long_fetch_addh]hraw_atomic_long_fetch_add}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjEhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jZsbc.raw_atomic_long_fetch_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjEhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjEhKubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhjEhKhj,hhubj )}(hhh]j9)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'j4j'j5j6j7uh1hhhhj:hNhNubjp)}(hX#**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjPh]hlong i}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjJubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjGubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubj9)}(hThe original value of **v**.h](hThe original value of }(hjFhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_acquire (C function)#c.raw_atomic_long_fetch_add_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_add_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h!raw_atomic_long_fetch_add_acquireh]h)}(h!raw_atomic_long_fetch_add_acquireh]h!raw_atomic_long_fetch_add_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_add_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhKhj|hhubj )}(hhh]j9)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj\hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj*hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh to (}(hj*hhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh + }(hj*hhhNhNubjz)}(h**i**h]hi}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh) with acquire ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_release (C function)#c.raw_atomic_long_fetch_add_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_add_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_add_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(h!raw_atomic_long_fetch_add_releaseh]h)}(h!raw_atomic_long_fetch_add_releaseh]h!raw_atomic_long_fetch_add_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_add_releaseasbuh1hhjDubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjDubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj)h]hatomic_long_t *v}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh to (}(hjzhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh + }(hjzhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh) with release ordering.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_add_relaxed (C function)#c.raw_atomic_long_fetch_add_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_add_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_add_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#hhhj5hMubh)}(h!raw_atomic_long_fetch_add_relaxedh]h)}(h!raw_atomic_long_fetch_add_relaxedh]h!raw_atomic_long_fetch_add_relaxed}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ](jjeh"]h$]h&]jj uh1hhj#hhhj5hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jJsb#c.raw_atomic_long_fetch_add_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubeh}(h]h ]h"]h$]h&]jj uh1jhj#hhhj5hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj5hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj5hMhjhhubj )}(hhh]j9)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj@h]hlong i}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjyh]hatomic_long_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjwubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hj6hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_sub (C function)c.raw_atomic_long_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_sub (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_sub(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjshhhjhM(ubh)}(hraw_atomic_long_subh]h)}(hraw_atomic_long_subh]hraw_atomic_long_sub}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjhM(ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_subasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjshhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjohhhjhM(ubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1hhjhM(hjlhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjLhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_sub() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjkubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubeh}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjkubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hjkubj9)}(h@Safe to use in noinstr code; prefer atomic_long_sub() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_sub() elsewhere.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hjkubj9)}(h **Return**h]jz)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM/hjkubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_sub_return (C function)c.raw_atomic_long_sub_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_sub_return (long i, atomic_long_t *v)h]h)}(h9long raw_atomic_long_sub_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM=ubh)}(hraw_atomic_long_sub_returnh]h)}(hraw_atomic_long_sub_returnh]hraw_atomic_long_sub_return}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM=ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj+modnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_sub_returnasbuh1hhj"ubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hjh]hv}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM=ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM=ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM=hjhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM=ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_sub_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjXhhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh to (}(hjXhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh - }(hjXhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubh) with full ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjubj9)}(hGSafe to use in noinstr code; prefer atomic_long_sub_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_sub_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMDhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_acquire (C function)$c.raw_atomic_long_sub_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMRubh)}(h"raw_atomic_long_sub_return_acquireh]h)}(h"raw_atomic_long_sub_return_acquireh]h"raw_atomic_long_sub_return_acquire}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMRubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hjh]hi}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj{modnameN classnameNjcjf)}ji]jl)}j_j(sb$c.raw_atomic_long_sub_return_acquireasbuh1hhjrubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj:ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMRhjhhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMShj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMShjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjWh]hatomic_long_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThjQubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMThjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMThjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMYhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_release (C function)$c.raw_atomic_long_sub_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_release (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMgubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQhhhjchMgubh)}(h"raw_atomic_long_sub_return_releaseh]h)}(h"raw_atomic_long_sub_return_releaseh]h"raw_atomic_long_sub_return_release}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjchMgubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jxsb$c.raw_atomic_long_sub_return_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhjchMgubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjchMgubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjchMghjJhhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghj*hhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchMgubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjIubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjnh]hlong i}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjhubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjeubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjeubeh}(h]h ]h"]h$]h&]uh1jhjIubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjIubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjIubj9)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjIubj9)}(h **Return**h]jz)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMnhjIubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjdhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubh.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjIubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_sub_return_relaxed (C function)$c.raw_atomic_long_sub_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_relaxed (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM|ubh)}(h"raw_atomic_long_sub_return_relaxedh]h)}(h"raw_atomic_long_sub_return_relaxedh]h"raw_atomic_long_sub_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM|ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb$c.raw_atomic_long_sub_return_relaxedasbuh1hhjubj=)}(h h]h }(hj9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM|ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM|ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM|hjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM|ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_sub_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM~hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM~hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjHhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh to (}(hjHhhhNhNubjz)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh - }(hjHhhhNhNubjz)}(h**i**h]hi}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubh) with relaxed ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_sub (C function)c.raw_atomic_long_fetch_subhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hraw_atomic_long_fetch_subh]h)}(hraw_atomic_long_fetch_subh]hraw_atomic_long_fetch_sub}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hjh]hi}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjihhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjkmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_fetch_subasbuh1hhjbubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj*ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX(**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjGh]hatomic_long_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjAubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_acquire (C function)#c.raw_atomic_long_fetch_sub_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjShMubh)}(h!raw_atomic_long_fetch_sub_acquireh]h)}(h!raw_atomic_long_fetch_sub_acquireh]h!raw_atomic_long_fetch_sub_acquire}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjShMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jhsb#c.raw_atomic_long_fetch_sub_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhjShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhjShMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhjShMhj:hhubj )}(hhh]j9)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j5j4j5j5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hj^h]hlong i}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj\ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj9)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj9)}(h **Return**h]jz)}(hj>h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj9)}(hThe original value of **v**.h](hThe original value of }(hjThhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_release (C function)#c.raw_atomic_long_fetch_sub_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h!raw_atomic_long_fetch_sub_releaseh]h)}(h!raw_atomic_long_fetch_sub_releaseh]h!raw_atomic_long_fetch_sub_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_sub_releaseasbuh1hhjubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hj8hhhNhNubjz)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh to (}(hj8hhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh - }(hj8hhhNhNubjz)}(h**i**h]hi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubh) with release ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_sub_relaxed (C function)#c.raw_atomic_long_fetch_sub_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h!raw_atomic_long_fetch_sub_relaxedh]h)}(h!raw_atomic_long_fetch_sub_relaxedh]h!raw_atomic_long_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[modnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_sub_relaxedasbuh1hhjRubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj7h]hatomic_long_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - }(hjhhhNhNubjz)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_inc (C function)c.raw_atomic_long_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+void raw_atomic_long_inc (atomic_long_t *v)h]h)}(h*void raw_atomic_long_inc(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1hhhjChMubh)}(hraw_atomic_long_inch]h)}(hraw_atomic_long_inch]hraw_atomic_long_inc}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1hhhjChMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjwmodnameN classnameNjcjf)}ji]jl)}j_jXsbc.raw_atomic_long_incasbuh1hhjnubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjjubah}(h]h ]h"]h$]h&]jj uh1jhj1hhhjChMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-hhhjChMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhjChMhj*hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_inc() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjkhhhNhNubjz)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh to (}(hjkhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh + 1) with relaxed ordering.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_inc_return (C function)c.raw_atomic_long_inc_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_inc_return (atomic_long_t *v)h]h)}(h1long raw_atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hMubh)}(hraw_atomic_long_inc_returnh]h)}(hraw_atomic_long_inc_returnh]hraw_atomic_long_inc_return}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj4 hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1 ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj6 modnameN classnameNjcjf)}ji]jl)}j_j sbc.raw_atomic_long_inc_returnasbuh1hhj- ubj=)}(h h]h }(hjT hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj- ubj)}(hjh]h*}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubh)}(hjh]hv}(hjo hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj- ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj) ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_inc_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj* hhhNhNubjz)}(h**v**h]hv}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj* ubh to (}(hj* hhhNhNubjz)}(h**v**h]hv}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj* ubh + 1) with full ordering.}(hj* hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(hGSafe to use in noinstr code; prefer atomic_long_inc_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_inc_return() elsewhere.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(h **Return**h]jz)}(hjn h]hReturn}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_acquire (C function)$c.raw_atomic_long_inc_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_inc_return_acquire (atomic_long_t *v)h]h)}(h9long raw_atomic_long_inc_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hM ubh)}(h"raw_atomic_long_inc_return_acquireh]h)}(h"raw_atomic_long_inc_return_acquireh]h"raw_atomic_long_inc_return_acquire}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sb$c.raw_atomic_long_inc_return_acquireasbuh1hhj ubj=)}(h h]h }(hj% hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj@ hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hM hj hhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjf hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_inc_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh + 1) with acquire ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_acquire() elsewhere.}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(h **Return**h]jz)}(hj? h]hReturn}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj= ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjU hhhNhNubjz)}(h**v**h]hv}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU ubh.}(hjU hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_release (C function)$c.raw_atomic_long_inc_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_inc_return_release (atomic_long_t *v)h]h)}(h9long raw_atomic_long_inc_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hM!ubh)}(h"raw_atomic_long_inc_return_releaseh]h)}(h"raw_atomic_long_inc_return_releaseh]h"raw_atomic_long_inc_return_release}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hM!ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sb$c.raw_atomic_long_inc_return_releaseasbuh1hhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj hhhj hM!ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hM!ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hM!hj hhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj7 hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM!ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jR j4jR j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic_long_inc_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj\ h]h Parameters}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hjV ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj{ h]hatomic_long_t *v}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjy ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hju ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hM"hj ubah}(h]h ]h"]h$]h&]uh1jhju ubeh}(h]h ]h"]h$]h&]uh1jhj hM"hjr ubah}(h]h ]h"]h$]h&]uh1jhjV ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjV ubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh + 1) with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjV ubj9)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_release() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hjV ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hjV ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj&hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjV ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_inc_return_relaxed (C function)$c.raw_atomic_long_inc_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_inc_return_relaxed (atomic_long_t *v)h]h)}(h9long raw_atomic_long_inc_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5ubj=)}(h h]h }(hjvhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjchhhjuhM5ubh)}(h"raw_atomic_long_inc_return_relaxedh]h)}(h"raw_atomic_long_inc_return_relaxedh]h"raw_atomic_long_inc_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjchhhjuhM5ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb$c.raw_atomic_long_inc_return_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjchhhjuhM5ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj_hhhjuhM5ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1hhjuhM5hj\hhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhM5ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j#j4j#j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj'ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjLh]hatomic_long_t *v}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hjFubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjahM6hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM6hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj'ubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hj'ubj9)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj'ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hj'ubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_inc (C function)c.raw_atomic_long_fetch_inchNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1long raw_atomic_long_fetch_inc (atomic_long_t *v)h]h)}(h0long raw_atomic_long_fetch_inc(atomic_long_t *v)h](j)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4hhhjFhMIubh)}(hraw_atomic_long_fetch_inch]h)}(hraw_atomic_long_fetch_inch]hraw_atomic_long_fetch_inc}(hjYhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhj4hhhjFhMIubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjzmodnameN classnameNjcjf)}ji]jl)}j_j[sbc.raw_atomic_long_fetch_incasbuh1hhjqubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubah}(h]h ]h"]h$]h&]jj uh1jhj4hhhjFhMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhjFhMIubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1hhjFhMIhj-hhubj )}(hhh]j9)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjFhMIubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMJhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMJhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjnhhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh to (}(hjnhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubh + 1) with full ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhjubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_acquire (C function)#c.raw_atomic_long_fetch_inc_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_inc_acquire (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_inc_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM]ubh)}(h!raw_atomic_long_fetch_inc_acquireh]h)}(h!raw_atomic_long_fetch_inc_acquireh]h!raw_atomic_long_fetch_inc_acquire}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM]ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jl)}j_j,sb#c.raw_atomic_long_fetch_inc_acquireasbuh1hhjBubj=)}(h h]h }(hjihhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM]ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM]ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM]hjhhubj )}(hhh]j9)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM]ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjubj9)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj?hhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh to (}(hj?hhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubh + 1) with acquire ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_acquire() elsewhere.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_release (C function)#c.raw_atomic_long_fetch_inc_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_inc_release (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_inc_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMqubh)}(h!raw_atomic_long_fetch_inc_releaseh]h)}(h!raw_atomic_long_fetch_inc_releaseh]h!raw_atomic_long_fetch_inc_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMqubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_inc_releaseasbuh1hhjubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMqhjhhubj )}(hhh]j9)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqhj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMqubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMrhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjubj9)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshjubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_release() elsewhere.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjubj9)}(h **Return**h]jz)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjjhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_inc_relaxed (C function)#c.raw_atomic_long_fetch_inc_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_inc_relaxed (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_inc_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h!raw_atomic_long_fetch_inc_relaxedh]h)}(h!raw_atomic_long_fetch_inc_relaxedh]h!raw_atomic_long_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb#c.raw_atomic_long_fetch_inc_relaxedasbuh1hhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj9)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj9)}(h **Return**h]jz)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj9)}(hThe original value of **v**.h](hThe original value of }(hj;hhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_dec (C function)c.raw_atomic_long_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h+void raw_atomic_long_dec (atomic_long_t *v)h]h)}(h*void raw_atomic_long_dec(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjxhhhjhMubh)}(hraw_atomic_long_dech]h)}(hraw_atomic_long_dech]hraw_atomic_long_dec}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjxhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_decasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjqhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_dec() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjah]hatomic_long_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj_ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj9)}(h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj9)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_dec_return (C function)c.raw_atomic_long_dec_returnhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_dec_return (atomic_long_t *v)h]h)}(h1long raw_atomic_long_dec_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7hhhjIhMubh)}(hraw_atomic_long_dec_returnh]h)}(hraw_atomic_long_dec_returnh]hraw_atomic_long_dec_return}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj}modnameN classnameNjcjf)}ji]jl)}j_j^sbc.raw_atomic_long_dec_returnasbuh1hhjtubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjtubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubah}(h]h ]h"]h$]h&]jj uh1jhj7hhhjIhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjIhMhj0hhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_dec_return() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj h]hatomic_long_t *v}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjqhhhNhNubjz)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh to (}(hjqhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh - 1) with full ordering.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hGSafe to use in noinstr code; prefer atomic_long_dec_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_dec_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_acquire (C function)$c.raw_atomic_long_dec_return_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_dec_return_acquire (atomic_long_t *v)h]h)}(h9long raw_atomic_long_dec_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h"raw_atomic_long_dec_return_acquireh]h)}(h"raw_atomic_long_dec_return_acquireh]h"raw_atomic_long_dec_return_acquire}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNmodnameN classnameNjcjf)}ji]jl)}j_j/sb$c.raw_atomic_long_dec_return_acquireasbuh1hhjEubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjBhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh to (}(hjBhhhNhNubjz)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh - 1) with acquire ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_release (C function)$c.raw_atomic_long_dec_return_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_dec_return_release (atomic_long_t *v)h]h)}(h9long raw_atomic_long_dec_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h"raw_atomic_long_dec_return_releaseh]h)}(h"raw_atomic_long_dec_return_releaseh]h"raw_atomic_long_dec_return_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb$c.raw_atomic_long_dec_return_releaseasbuh1hhjubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_long_dec_return_release() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_release() elsewhere.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe updated value of **v**.h](hThe updated value of }(hjmhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ/raw_atomic_long_dec_return_relaxed (C function)$c.raw_atomic_long_dec_return_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_dec_return_relaxed (atomic_long_t *v)h]h)}(h9long raw_atomic_long_dec_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h"raw_atomic_long_dec_return_relaxedh]h)}(h"raw_atomic_long_dec_return_relaxedh]h"raw_atomic_long_dec_return_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb$c.raw_atomic_long_dec_return_relaxedasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jjj4jjj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere. **Return** The updated value of **v**.h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(h **Return**h]jz)}(hj( h]hReturn}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj& ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(hThe updated value of **v**.h](hThe updated value of }(hj> hhhNhNubjz)}(h**v**h]hv}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj> ubh.}(hj> hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_dec (C function)c.raw_atomic_long_fetch_dechNtauh1hhj:hhhNhNubh)}(hhh](h)}(h1long raw_atomic_long_fetch_dec (atomic_long_t *v)h]h)}(h0long raw_atomic_long_fetch_dec(atomic_long_t *v)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{ hhhj hMubh)}(hraw_atomic_long_fetch_dech]h)}(hraw_atomic_long_fetch_dech]hraw_atomic_long_fetch_dec}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj{ hhhj hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sbc.raw_atomic_long_fetch_decasbuh1hhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhj{ hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjw hhhj hMubah}(h]jr ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjt hhubj )}(hhh]j9)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj#!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj !hhubah}(h]h ]h"]h$]h&]uh1jhjt hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j;!j4j;!j5j6j7uh1hhhhj:hNhNubjp)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjE!h]h Parameters}(hjG!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC!ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjd!h]hatomic_long_t *v}(hjf!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjb!ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj^!ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj}!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjy!hMhjz!ubah}(h]h ]h"]h$]h&]uh1jhj^!ubeh}(h]h ]h"]h$]h&]uh1jhjy!hMhj[!ubah}(h]h ]h"]h$]h&]uh1jhj?!ubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh to (}(hj!hhhNhNubjz)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh - 1) with full ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_dec() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_dec() elsewhere.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubj9)}(h **Return**h]jz)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubj9)}(hThe original value of **v**.h](hThe original value of }(hj"hhhNhNubjz)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_acquire (C function)#c.raw_atomic_long_fetch_dec_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_acquire (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjP"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL"hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj_"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjL"hhhj^"hMubh)}(h!raw_atomic_long_fetch_dec_acquireh]h)}(h!raw_atomic_long_fetch_dec_acquireh]h!raw_atomic_long_fetch_dec_acquire}(hjq"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjm"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjL"hhhj^"hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jl)}j_js"sb#c.raw_atomic_long_fetch_dec_acquireasbuh1hhj"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hjh]hv}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"ubah}(h]h ]h"]h$]h&]jj uh1jhjL"hhhj^"hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjH"hhhj^"hMubah}(h]jC"ah ](jjeh"]h$]h&]jj)jhuh1hhj^"hMhjE"hhubj )}(hhh]j9)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jhjE"hhhj^"hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j #j4j #j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj5#h]hatomic_long_t *v}(hj7#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3#ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/#ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjN#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJ#hMhjK#ubah}(h]h ]h"]h$]h&]uh1jhj/#ubeh}(h]h ]h"]h$]h&]uh1jhjJ#hMhj,#ubah}(h]h ]h"]h$]h&]uh1jhj#ubj9)}(h**Description**h]jz)}(hjp#h]h Description}(hjr#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn#ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj9)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh to (}(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh - 1) with acquire ordering.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_acquire() elsewhere.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj9)}(h **Return**h]jz)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj9)}(hThe original value of **v**.h](hThe original value of }(hj#hhhNhNubjz)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_release (C function)#c.raw_atomic_long_fetch_dec_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_release (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hj!$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%ubj=)}(h h]h }(hj0$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$hhhj/$hM%ubh)}(h!raw_atomic_long_fetch_dec_releaseh]h)}(h!raw_atomic_long_fetch_dec_releaseh]h!raw_atomic_long_fetch_dec_release}(hjB$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj$hhhj/$hM%ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hja$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjc$modnameN classnameNjcjf)}ji]jl)}j_jD$sb#c.raw_atomic_long_fetch_dec_releaseasbuh1hhjZ$ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZ$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ$ubh)}(hjh]hv}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZ$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjV$ubah}(h]h ]h"]h$]h&]jj uh1jhj$hhhj/$hM%ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj$hhhj/$hM%ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhj/$hM%hj$hhubj )}(hhh]j9)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj$hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj/$hM%ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j$j4j$j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj$ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj%h]hatomic_long_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hj%ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hM&hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM&hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubj9)}(h**Description**h]jz)}(hjA%h]h Description}(hjC%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?%ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hj$ubj9)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjW%hhhNhNubjz)}(h**v**h]hv}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW%ubh to (}(hjW%hhhNhNubjz)}(h**v**h]hv}(hjq%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW%ubh - 1) with release ordering.}(hjW%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj$ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj$ubj9)}(h **Return**h]jz)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hj$ubj9)}(hThe original value of **v**.h](hThe original value of }(hj%hhhNhNubjz)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_dec_relaxed (C function)#c.raw_atomic_long_fetch_dec_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%hhhj&hM9ubh)}(h!raw_atomic_long_fetch_dec_relaxedh]h)}(h!raw_atomic_long_fetch_dec_relaxedh]h!raw_atomic_long_fetch_dec_relaxed}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj%hhhj&hM9ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj2&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj4&modnameN classnameNjcjf)}ji]jl)}j_j&sb#c.raw_atomic_long_fetch_dec_relaxedasbuh1hhj+&ubj=)}(h h]h }(hjR&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj+&ubj)}(hjh]h*}(hj`&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+&ubh)}(hjh]hv}(hjm&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj'&ubah}(h]h ]h"]h$]h&]jj uh1jhj%hhhj&hM9ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj&hM9ubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1hhj&hM9hj%hhubj )}(hhh]j9)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj&hM9ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hj&ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj&h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hj&ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hM:hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM:hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubj9)}(h**Description**h]jz)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hj&ubj9)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj('hhhNhNubjz)}(h**v**h]hv}(hj0'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj('ubh to (}(hj('hhhNhNubjz)}(h**v**h]hv}(hjB'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj('ubh - 1) with relaxed ordering.}(hj('hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hj&ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.}(hj['hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hj&ubj9)}(h **Return**h]jz)}(hjl'h]hReturn}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj'ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hj&ubj9)}(hThe original value of **v**.h](hThe original value of }(hj'hhhNhNubjz)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_and (C function)c.raw_atomic_long_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_and (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj'hMMubh)}(hraw_atomic_long_andh]h)}(hraw_atomic_long_andh]hraw_atomic_long_and}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj'hMMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubh)}(hjh]hi}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj'ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj7(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj9(modnameN classnameNjcjf)}ji]jl)}j_j'sbc.raw_atomic_long_andasbuh1hhj0(ubj=)}(h h]h }(hjW(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0(ubj)}(hjh]h*}(hje(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0(ubh)}(hjh]hv}(hjr(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj'ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj'hMMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj'hhhj'hMMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1hhj'hMMhj'hhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j(j4j(j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_and() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj(ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj(h]hlong i}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj(ubj)}(hhh]j9)}(h long valueh]h long value}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMNhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMNhj(ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj)h]hatomic_long_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhj)ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj.)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*)hMOhj+)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*)hMOhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubj9)}(h**Description**h]jz)}(hjP)h]h Description}(hjR)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN)ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhj(ubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjf)hhhNhNubjz)}(h**v**h]hv}(hjn)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf)ubh to (}(hjf)hhhNhNubjz)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf)ubh & }(hjf)hhhNhNubjz)}(h**i**h]hi}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf)ubh) with relaxed ordering.}(hjf)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhj(ubj9)}(h@Safe to use in noinstr code; prefer atomic_long_and() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_and() elsewhere.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhj(ubj9)}(h **Return**h]jz)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThj(ubj9)}(hNothing.h]hNothing.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_and (C function)c.raw_atomic_long_fetch_andhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_and (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_and(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj*hMbubh)}(hraw_atomic_long_fetch_andh]h)}(hraw_atomic_long_fetch_andh]hraw_atomic_long_fetch_and}(hj"*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj*hMbubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj>*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:*ubj=)}(h h]h }(hjL*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:*ubh)}(hjh]hi}(hjZ*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj6*ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hju*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr*ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjw*modnameN classnameNjcjf)}ji]jl)}j_j$*sbc.raw_atomic_long_fetch_andasbuh1hhjn*ubj=)}(h h]h }(hj*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjn*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn*ubh)}(hjh]hv}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj6*ubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj*hMbubeh}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhj*hMbubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1hhj*hMbhj)hhubj )}(hhh]j9)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj*hMbubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj*ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj+h]hlong i}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj+ubj)}(hhh]j9)}(h long valueh]h long value}(hj3+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/+hMchj0+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj/+hMchj+ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjS+h]hatomic_long_t *v}(hjU+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ+ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjM+ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjl+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh+hMdhji+ubah}(h]h ]h"]h$]h&]uh1jhjM+ubeh}(h]h ]h"]h$]h&]uh1jhjh+hMdhj+ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj*ubj9)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hj+hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh to (}(hj+hhhNhNubjz)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh & }(hj+hhhNhNubjz)}(h**i**h]hi}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubh) with full ordering.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj*ubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghj*ubj9)}(h **Return**h]jz)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihj*ubj9)}(hThe original value of **v**.h](hThe original value of }(hj,hhhNhNubjz)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_acquire (C function)#c.raw_atomic_long_fetch_and_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_and_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_and_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjQ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM,hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwubj=)}(h h]h }(hj`,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjM,hhhj_,hMwubh)}(h!raw_atomic_long_fetch_and_acquireh]h)}(h!raw_atomic_long_fetch_and_acquireh]h!raw_atomic_long_fetch_and_acquire}(hjr,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjM,hhhj_,hMwubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubh)}(hjh]hi}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_jt,sb#c.raw_atomic_long_fetch_and_acquireasbuh1hhj,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hjh]hv}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj,ubeh}(h]h ]h"]h$]h&]jj uh1jhjM,hhhj_,hMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhjI,hhhj_,hMwubah}(h]jD,ah ](jjeh"]h$]h&]jj)jhuh1hhj_,hMwhjF,hhubj )}(hhh]j9)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj)-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj&-hhubah}(h]h ]h"]h$]h&]uh1jhjF,hhhj_,hMwubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jA-j4jA-j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_and_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjK-h]h Parameters}(hjM-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjI-ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjE-ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjj-h]hlong i}(hjl-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjh-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjd-ubj)}(hhh]j9)}(h long valueh]h long value}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMxhj-ubah}(h]h ]h"]h$]h&]uh1jhjd-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMxhja-ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj-h]hatomic_long_t *v}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMyhj-ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-hMyhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMyhja-ubeh}(h]h ]h"]h$]h&]uh1jhjE-ubj9)}(h**Description**h]jz)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjE-ubj9)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hj-hhhNhNubjz)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh to (}(hj-hhhNhNubjz)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh & }(hj-hhhNhNubjz)}(h**i**h]hi}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubh) with acquire ordering.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhjE-ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_and_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_and_acquire() elsewhere.}(hj9.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjE-ubj9)}(h **Return**h]jz)}(hjJ.h]hReturn}(hjL.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH.ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjE-ubj9)}(hThe original value of **v**.h](hThe original value of }(hj`.hhhNhNubjz)}(h**v**h]hv}(hjh.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`.ubh.}(hj`.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjE-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_release (C function)#c.raw_atomic_long_fetch_and_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_and_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_and_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.hhhj.hMubh)}(h!raw_atomic_long_fetch_and_releaseh]h)}(h!raw_atomic_long_fetch_and_releaseh]h!raw_atomic_long_fetch_and_release}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj.hhhj.hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj=)}(h h]h }(hj.hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj.ubh)}(hjh]hi}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jl)}j_j.sb#c.raw_atomic_long_fetch_and_releaseasbuh1hhj/ubj=)}(h h]h }(hj5/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubj)}(hjh]h*}(hjC/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hjh]hv}(hjP/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj.ubeh}(h]h ]h"]h$]h&]jj uh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.hhhj.hMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhj.hMhj.hhubj )}(hhh]j9)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjy/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjv/hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j/j4j/j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_and_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj/h]hlong i}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj)}(hhh]j9)}(h long valueh]h long value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj/h]hatomic_long_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj0hMhj 0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubj9)}(h**Description**h]jz)}(hj.0h]h Description}(hj00hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,0ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj9)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjD0hhhNhNubjz)}(h**v**h]hv}(hjL0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD0ubh to (}(hjD0hhhNhNubjz)}(h**v**h]hv}(hj^0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD0ubh & }(hjD0hhhNhNubjz)}(h**i**h]hi}(hjp0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD0ubh) with release ordering.}(hjD0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_and_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_and_release() elsewhere.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj9)}(h **Return**h]jz)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj9)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubjz)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_and_relaxed (C function)#c.raw_atomic_long_fetch_and_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_and_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_and_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0hhhj0hMubh)}(h!raw_atomic_long_fetch_and_relaxedh]h)}(h!raw_atomic_long_fetch_and_relaxedh]h!raw_atomic_long_fetch_and_relaxed}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj0hhhj0hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj.1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*1ubj=)}(h h]h }(hj<1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*1ubh)}(hjh]hi}(hjJ1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&1ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hje1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb1ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjg1modnameN classnameNjcjf)}ji]jl)}j_j1sb#c.raw_atomic_long_fetch_and_relaxedasbuh1hhj^1ubj=)}(h h]h }(hj1hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^1ubh)}(hjh]hv}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^1ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&1ubeh}(h]h ]h"]h$]h&]jj uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj0hhhj0hMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1hhj0hMhj0hhubj )}(hhh]j9)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_and_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj 2h]hlong i}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2ubj)}(hhh]j9)}(h long valueh]h long value}(hj#2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2hMhj 2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjC2h]hatomic_long_t *v}(hjE2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjA2ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj=2ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj\2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjX2hMhjY2ubah}(h]h ]h"]h$]h&]uh1jhj=2ubeh}(h]h ]h"]h$]h&]uh1jhjX2hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hj~2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|2ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj9)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh to (}(hj2hhhNhNubjz)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh & }(hj2hhhNhNubjz)}(h**i**h]hi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubh) with relaxed ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_and_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_and_relaxed() elsewhere.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj9)}(h **Return**h]jz)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj9)}(hThe original value of **v**.h](hThe original value of }(hj3hhhNhNubjz)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#raw_atomic_long_andnot (C function)c.raw_atomic_long_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6void raw_atomic_long_andnot (long i, atomic_long_t *v)h]h)}(h5void raw_atomic_long_andnot(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjA3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=3hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjP3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=3hhhjO3hMubh)}(hraw_atomic_long_andnoth]h)}(hraw_atomic_long_andnoth]hraw_atomic_long_andnot}(hjb3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^3ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=3hhhjO3hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj~3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz3ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjz3ubh)}(hjh]hi}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjv3ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]jl)}j_jd3sbc.raw_atomic_long_andnotasbuh1hhj3ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjv3ubeh}(h]h ]h"]h$]h&]jj uh1jhj=3hhhjO3hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj93hhhjO3hMubah}(h]j43ah ](jjeh"]h$]h&]jj)jhuh1hhjO3hMhj63hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj63hhhjO3hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j14j4j14j5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_andnot() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj;4h]h Parameters}(hj=4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj94ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjZ4h]hlong i}(hj\4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjX4ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjT4ubj)}(hhh]j9)}(h long valueh]h long value}(hjs4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjo4hMhjp4ubah}(h]h ]h"]h$]h&]uh1jhjT4ubeh}(h]h ]h"]h$]h&]uh1jhjo4hMhjQ4ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj4h]hatomic_long_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj4ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjQ4ubeh}(h]h ]h"]h$]h&]uh1jhj54ubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh to (}(hj4hhhNhNubjz)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh & }(hj4hhhNhNubjz)}(h**~i**h]h~i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh) with relaxed ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubj9)}(hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.}(hj)5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubj9)}(h **Return**h]jz)}(hj:5h]hReturn}(hj<5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj85ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubj9)}(hNothing.h]hNothing.}(hjP5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj54ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_fetch_andnot (C function)c.raw_atomic_long_fetch_andnothNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhj6ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6ubj)}(hhh]j9)}(h long valueh]h long value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj6h]hatomic_long_t *v}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj6ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjs6ubj9)}(h**Description**h]jz)}(hj 7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 7ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjs6ubj9)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hj"7hhhNhNubjz)}(h**v**h]hv}(hj*7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"7ubh to (}(hj"7hhhNhNubjz)}(h**v**h]hv}(hj<7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"7ubh & }(hj"7hhhNhNubjz)}(h**~i**h]h~i}(hjN7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"7ubh) with full ordering.}(hj"7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjs6ubj9)}(hISafe to use in noinstr code; prefer atomic_long_fetch_andnot() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_fetch_andnot() elsewhere.}(hjg7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjs6ubj9)}(h **Return**h]jz)}(hjx7h]hReturn}(hjz7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjv7ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjs6ubj9)}(hThe original value of **v**.h](hThe original value of }(hj7hhhNhNubjz)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjs6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_fetch_andnot_acquire (C function)&c.raw_atomic_long_fetch_andnot_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_acquire (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7hhhj7hMubh)}(h$raw_atomic_long_fetch_andnot_acquireh]h)}(h$raw_atomic_long_fetch_andnot_acquireh]h$raw_atomic_long_fetch_andnot_acquire}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhj7hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubh)}(hjh]hi}(hj(8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj8ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjC8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjE8modnameN classnameNjcjf)}ji]jl)}j_j7sb&c.raw_atomic_long_fetch_andnot_acquireasbuh1hhj<8ubj=)}(h h]h }(hjc8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<8ubj)}(hjh]h*}(hjq8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<8ubh)}(hjh]hv}(hj~8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj8ubeh}(h]h ]h"]h$]h&]jj uh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj7hhhj7hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1hhj7hMhj7hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j8j4j8j5j6j7uh1hhhhj:hNhNubjp)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj8h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj)}(hhh]j9)}(h long valueh]h long value}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj!9h]hatomic_long_t *v}(hj#9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj9ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj69hMhj79ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj69hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hj\9h]h Description}(hj^9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ9ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjr9hhhNhNubjz)}(h**v**h]hv}(hjz9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr9ubh to (}(hjr9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr9ubh & }(hjr9hhhNhNubjz)}(h**~i**h]h~i}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjr9ubh) with acquire ordering.}(hjr9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj9)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj9)}(h **Return**h]jz)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj9)}(hThe original value of **v**.h](hThe original value of }(hj9hhhNhNubjz)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_fetch_andnot_release (C function)&c.raw_atomic_long_fetch_andnot_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_release (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj.:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:hhhj-:hMubh)}(h$raw_atomic_long_fetch_andnot_releaseh]h)}(h$raw_atomic_long_fetch_andnot_releaseh]h$raw_atomic_long_fetch_andnot_release}(hj@:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<:ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj-:hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj\:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX:ubj=)}(h h]h }(hjj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjX:ubh)}(hjh]hi}(hjx:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjX:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjT:ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj:modnameN classnameNjcjf)}ji]jl)}j_jB:sb&c.raw_atomic_long_fetch_andnot_releaseasbuh1hhj:ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hjh]hv}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjT:ubeh}(h]h ]h"]h$]h&]jj uh1jhj:hhhj-:hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj-:hMubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhj-:hMhj:hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj-:hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j;j4j;j5j6j7uh1hhhhj:hNhNubjp)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj8;h]hlong i}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6;ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj2;ubj)}(hhh]j9)}(h long valueh]h long value}(hjQ;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjM;hMhjN;ubah}(h]h ]h"]h$]h&]uh1jhj2;ubeh}(h]h ]h"]h$]h&]uh1jhjM;hMhj/;ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjq;h]hatomic_long_t *v}(hjs;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjo;ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjk;ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjk;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj/;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh to (}(hj;hhhNhNubjz)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh & }(hj;hhhNhNubjz)}(h**~i**h]h~i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubh) with release ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj9)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj9)}(h **Return**h]jz)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj9)}(hThe original value of **v**.h](hThe original value of }(hj.<hhhNhNubjz)}(h**v**h]hv}(hj6<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.<ubh.}(hj.<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_fetch_andnot_relaxed (C function)&c.raw_atomic_long_fetch_andnot_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_relaxed (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjo<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk<hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubj=)}(h h]h }(hj~<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjk<hhhj}<hM ubh)}(h$raw_atomic_long_fetch_andnot_relaxedh]h)}(h$raw_atomic_long_fetch_andnot_relaxedh]h$raw_atomic_long_fetch_andnot_relaxed}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjk<hhhj}<hM ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubh)}(hjh]hi}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jl)}j_j<sb&c.raw_atomic_long_fetch_andnot_relaxedasbuh1hhj<ubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj<ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hjh]hv}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubeh}(h]h ]h"]h$]h&]jj uh1jhjk<hhhj}<hM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjg<hhhj}<hM ubah}(h]jb<ah ](jjeh"]h$]h&]jj)jhuh1hhj}<hM hjd<hhubj )}(hhh]j9)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjG=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjD=hhubah}(h]h ]h"]h$]h&]uh1jhjd<hhhj}<hM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_=j4j_=j5j6j7uh1hhhhj:hNhNubjp)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hji=h]h Parameters}(hjk=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg=ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc=ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj=h]hlong i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj=ubj)}(hhh]j9)}(h long valueh]h long value}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj=h]hatomic_long_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj=ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubeh}(h]h ]h"]h$]h&]uh1jhjc=ubj9)}(h**Description**h]jz)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc=ubj9)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj>hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh to (}(hj>hhhNhNubjz)}(h**v**h]hv}(hj,>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh & }(hj>hhhNhNubjz)}(h**~i**h]h~i}(hj>>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubh) with relaxed ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjc=ubj9)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc=ubj9)}(h **Return**h]jz)}(hjh>h]hReturn}(hjj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf>ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc=ubj9)}(hThe original value of **v**.h](hThe original value of }(hj~>hhhNhNubjz)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~>ubh.}(hj~>hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjc=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌraw_atomic_long_or (C function)c.raw_atomic_long_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h2void raw_atomic_long_or (long i, atomic_long_t *v)h]h)}(h1void raw_atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>hhhj>hMubh)}(hraw_atomic_long_orh]h)}(hraw_atomic_long_orh]hraw_atomic_long_or}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj>hhhj>hMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hj ?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubh)}(hjh]hi}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj3?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj5?modnameN classnameNjcjf)}ji]jl)}j_j>sbc.raw_atomic_long_orasbuh1hhj,?ubj=)}(h h]h }(hjS?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,?ubj)}(hjh]h*}(hja?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,?ubh)}(hjh]hv}(hjn?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj>ubeh}(h]h ]h"]h$]h&]jj uh1jhj>hhhj>hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj>hhhj>hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1hhj>hMhj>hhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_or() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj?ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj?h]hlong i}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj?ubj)}(hhh]j9)}(h long valueh]h long value}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj@h]hatomic_long_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj @ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj*@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&@hM!hj'@ubah}(h]h ]h"]h$]h&]uh1jhj @ubeh}(h]h ]h"]h$]h&]uh1jhj&@hM!hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h**Description**h]jz)}(hjL@h]h Description}(hjN@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ@ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj?ubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjb@hhhNhNubjz)}(h**v**h]hv}(hjj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb@ubh to (}(hjb@hhhNhNubjz)}(h**v**h]hv}(hj|@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb@ubh | }(hjb@hhhNhNubjz)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb@ubh) with relaxed ordering.}(hjb@hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hj?ubj9)}(h?Safe to use in noinstr code; prefer atomic_long_or() elsewhere.h]h?Safe to use in noinstr code; prefer atomic_long_or() elsewhere.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hj?ubj9)}(h **Return**h]jz)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hj?ubj9)}(hNothing.h]hNothing.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%raw_atomic_long_fetch_or (C function)c.raw_atomic_long_fetch_orhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h8long raw_atomic_long_fetch_or (long i, atomic_long_t *v)h]h)}(h7long raw_atomic_long_fetch_or(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4ubj=)}(h h]h }(hj AhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@hhhj AhM4ubh)}(hraw_atomic_long_fetch_orh]h)}(hraw_atomic_long_fetch_orh]hraw_atomic_long_fetch_or}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhj AhM4ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj:AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Aubj=)}(h h]h }(hjHAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6Aubh)}(hjh]hi}(hjVAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6Aubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2Aubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjqAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjsAmodnameN classnameNjcjf)}ji]jl)}j_j Asbc.raw_atomic_long_fetch_orasbuh1hhjjAubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjAubh)}(hjh]hv}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2Aubeh}(h]h ]h"]h$]h&]jj uh1jhj@hhhj AhM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@hhhj AhM4ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhj AhM4hj@hhubj )}(hhh]j9)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj AhM4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjAubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjBh]hlong i}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hjBubj)}(hhh]j9)}(h long valueh]h long value}(hj/BhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+BhM5hj,Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj+BhM5hj Bubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjOBh]hatomic_long_t *v}(hjQBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMBubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hjIBubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdBhM6hjeBubah}(h]h ]h"]h$]h&]uh1jhjIBubeh}(h]h ]h"]h$]h&]uh1jhjdBhM6hj Bubeh}(h]h ]h"]h$]h&]uh1jhjAubj9)}(h**Description**h]jz)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjAubj9)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hjBhhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh to (}(hjBhhhNhNubjz)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh | }(hjBhhhNhNubjz)}(h**i**h]hi}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh) with full ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hjAubj9)}(hESafe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere.h]hESafe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjAubj9)}(h **Return**h]jz)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjAubj9)}(hThe original value of **v**.h](hThe original value of }(hj ChhhNhNubjz)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Cubh.}(hj ChhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_acquire (C function)"c.raw_atomic_long_fetch_or_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long raw_atomic_long_fetch_or_acquire (long i, atomic_long_t *v)h]h)}(h?long raw_atomic_long_fetch_or_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjMChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIChhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubj=)}(h h]h }(hj\ChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIChhhj[ChMIubh)}(h raw_atomic_long_fetch_or_acquireh]h)}(h raw_atomic_long_fetch_or_acquireh]h raw_atomic_long_fetch_or_acquire}(hjnChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIChhhj[ChMIubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCubh)}(hjh]hi}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_jpCsb"c.raw_atomic_long_fetch_or_acquireasbuh1hhjCubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hjh]hv}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjCubeh}(h]h ]h"]h$]h&]jj uh1jhjIChhhj[ChMIubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEChhhj[ChMIubah}(h]j@Cah ](jjeh"]h$]h&]jj)jhuh1hhj[ChMIhjBChhubj )}(hhh]j9)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj%DhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj"Dhhubah}(h]h ]h"]h$]h&]uh1jhjBChhhj[ChMIubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j=Dj4j=Dj5j6j7uh1hhhhj:hNhNubjp)}(hX&**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjGDh]h Parameters}(hjIDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEDubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjADubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjfDh]hlong i}(hjhDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdDubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhj`Dubj)}(hhh]j9)}(h long valueh]h long value}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{DhMJhj|Dubah}(h]h ]h"]h$]h&]uh1jhj`Dubeh}(h]h ]h"]h$]h&]uh1jhj{DhMJhj]Dubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjDh]hatomic_long_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhjDubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjDhMKhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMKhj]Dubeh}(h]h ]h"]h$]h&]uh1jhjADubj9)}(h**Description**h]jz)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjADubj9)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjDhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh to (}(hjDhhhNhNubjz)}(h**v**h]hv}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh | }(hjDhhhNhNubjz)}(h**i**h]hi}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh) with acquire ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjADubj9)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_or_acquire() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_or_acquire() elsewhere.}(hj5EhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhjADubj9)}(h **Return**h]jz)}(hjFEh]hReturn}(hjHEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDEubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjADubj9)}(hThe original value of **v**.h](hThe original value of }(hj\EhhhNhNubjz)}(h**v**h]hv}(hjdEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\Eubh.}(hj\EhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjADubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_release (C function)"c.raw_atomic_long_fetch_or_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long raw_atomic_long_fetch_or_release (long i, atomic_long_t *v)h]h)}(h?long raw_atomic_long_fetch_or_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^ubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEhhhjEhM^ubh)}(h raw_atomic_long_fetch_or_releaseh]h)}(h raw_atomic_long_fetch_or_releaseh]h raw_atomic_long_fetch_or_release}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhjEhM^ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEubh)}(hjh]hi}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_jEsb"c.raw_atomic_long_fetch_or_releaseasbuh1hhj Fubj=)}(h h]h }(hj1FhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj Fubj)}(hjh]h*}(hj?FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Fubh)}(hjh]hv}(hjLFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Fubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubeh}(h]h ]h"]h$]h&]jj uh1jhjEhhhjEhM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjEhM^ubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhjEhM^hjEhhubj )}(hhh]j9)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjuFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjrFhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhM^ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jFj4jFj5j6j7uh1hhhhj:hNhNubjp)}(hX&**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhjFubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjFh]hlong i}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjFubj)}(hhh]j9)}(h long valueh]h long value}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFhM_hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM_hjFubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjFh]hatomic_long_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjFubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhM`hjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjGhM`hjFubeh}(h]h ]h"]h$]h&]uh1jhjFubj9)}(h**Description**h]jz)}(hj*Gh]h Description}(hj,GhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(Gubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhjFubj9)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hj@GhhhNhNubjz)}(h**v**h]hv}(hjHGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@Gubh to (}(hj@GhhhNhNubjz)}(h**v**h]hv}(hjZGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@Gubh | }(hj@GhhhNhNubjz)}(h**i**h]hi}(hjlGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@Gubh) with release ordering.}(hj@GhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjFubj9)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjFubj9)}(h **Return**h]jz)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehjFubj9)}(hThe original value of **v**.h](hThe original value of }(hjGhhhNhNubjz)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_or_relaxed (C function)"c.raw_atomic_long_fetch_or_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h@long raw_atomic_long_fetch_or_relaxed (long i, atomic_long_t *v)h]h)}(h?long raw_atomic_long_fetch_or_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMsubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjGhhhjGhMsubh)}(h raw_atomic_long_fetch_or_relaxedh]h)}(h raw_atomic_long_fetch_or_relaxedh]h raw_atomic_long_fetch_or_relaxed}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Hubah}(h]h ](jjeh"]h$]h&]jj uh1hhjGhhhjGhMsubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj*HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Hubj=)}(h h]h }(hj8HhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&Hubh)}(hjh]hi}(hjFHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&Hubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"Hubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjaHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^Hubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjcHmodnameN classnameNjcjf)}ji]jl)}j_jHsb"c.raw_atomic_long_fetch_or_relaxedasbuh1hhjZHubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZHubh)}(hjh]hv}(hjHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZHubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj"Hubeh}(h]h ]h"]h$]h&]jj uh1jhjGhhhjGhMsubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhjGhMsubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjGhMshjGhhubj )}(hhh]j9)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMsubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jHj4jHj5j6j7uh1hhhhj:hNhNubjp)}(hX&**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjHubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjIh]hlong i}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjIubj)}(hhh]j9)}(h long valueh]h long value}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIhMthjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMthjHubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj?Ih]hatomic_long_t *v}(hjAIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=Iubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj9Iubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjTIhMuhjUIubah}(h]h ]h"]h$]h&]uh1jhj9Iubeh}(h]h ]h"]h$]h&]uh1jhjTIhMuhjHubeh}(h]h ]h"]h$]h&]uh1jhjHubj9)}(h**Description**h]jz)}(hjzIh]h Description}(hj|IhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxIubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjHubj9)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjIhhhNhNubjz)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh to (}(hjIhhhNhNubjz)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh | }(hjIhhhNhNubjz)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh) with relaxed ordering.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMvhjHubj9)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_or_relaxed() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_or_relaxed() elsewhere.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjHubj9)}(h **Return**h]jz)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhjHubj9)}(hThe original value of **v**.h](hThe original value of }(hjIhhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ raw_atomic_long_xor (C function)c.raw_atomic_long_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_xor (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_xor(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj=JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Jhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjLJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9JhhhjKJhMubh)}(hraw_atomic_long_xorh]h)}(hraw_atomic_long_xorh]hraw_atomic_long_xor}(hj^JhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj9JhhhjKJhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjzJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvJubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvJubh)}(hjh]hi}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvJubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjrJubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjJmodnameN classnameNjcjf)}ji]jl)}j_j`Jsbc.raw_atomic_long_xorasbuh1hhjJubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hjh]hv}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjrJubeh}(h]h ]h"]h$]h&]jj uh1jhj9JhhhjKJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5JhhhjKJhMubah}(h]j0Jah ](jjeh"]h$]h&]jj)jhuh1hhjKJhMhj2Jhhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhj2JhhhjKJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-Kj4j-Kj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_xor() elsewhere. **Return** Nothing.h](j9)}(h**Parameters**h]jz)}(hj7Kh]h Parameters}(hj9KhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5Kubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjVKh]hlong i}(hjXKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTKubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPKubj)}(hhh]j9)}(h long valueh]h long value}(hjoKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkKhMhjlKubah}(h]h ]h"]h$]h&]uh1jhjPKubeh}(h]h ]h"]h$]h&]uh1jhjkKhMhjMKubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjKh]hatomic_long_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjKubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjMKubeh}(h]h ]h"]h$]h&]uh1jhj1Kubj9)}(h**Description**h]jz)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjKhhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh to (}(hjKhhhNhNubjz)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh ^ }(hjKhhhNhNubjz)}(h**i**h]hi}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubh) with relaxed ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubj9)}(h@Safe to use in noinstr code; prefer atomic_long_xor() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_xor() elsewhere.}(hj%LhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubj9)}(h **Return**h]jz)}(hj6Lh]hReturn}(hj8LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4Lubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubj9)}(hNothing.h]hNothing.}(hjLLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1Kubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&raw_atomic_long_fetch_xor (C function)c.raw_atomic_long_fetch_xorhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_xor (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_xor(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj{LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwLhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjwLhhhjLhMubh)}(hraw_atomic_long_fetch_xorh]h)}(hraw_atomic_long_fetch_xorh]hraw_atomic_long_fetch_xor}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjwLhhhjLhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hjh]hi}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjLmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.raw_atomic_long_fetch_xorasbuh1hhjLubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hv}(hj*MhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubeh}(h]h ]h"]h$]h&]jj uh1jhjwLhhhjLhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjsLhhhjLhMubah}(h]jnLah ](jjeh"]h$]h&]jj)jhuh1hhjLhMhjpLhhubj )}(hhh]j9)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjSMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPMhhubah}(h]h ]h"]h$]h&]uh1jhjpLhhhjLhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jkMj4jkMj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjuMh]h Parameters}(hjwMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsMubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjMh]hlong i}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjMubj)}(hhh]j9)}(h long valueh]h long value}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjMh]hatomic_long_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjMubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjoMubj9)}(h**Description**h]jz)}(hjNh]h Description}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubj9)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjNhhhNhNubjz)}(h**v**h]hv}(hj&NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh to (}(hjNhhhNhNubjz)}(h**v**h]hv}(hj8NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh ^ }(hjNhhhNhNubjz)}(h**i**h]hi}(hjJNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh) with full ordering.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubj9)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere.}(hjcNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubj9)}(h **Return**h]jz)}(hjtNh]hReturn}(hjvNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubj9)}(hThe original value of **v**.h](hThe original value of }(hjNhhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjoMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_acquire (C function)#c.raw_atomic_long_fetch_xor_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_xor_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_xor_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjNhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjNhhhjNhMubh)}(h!raw_atomic_long_fetch_xor_acquireh]h)}(h!raw_atomic_long_fetch_xor_acquireh]h!raw_atomic_long_fetch_xor_acquire}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubah}(h]h ](jjeh"]h$]h&]jj uh1hhjNhhhjNhMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj=)}(h h]h }(hjOhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOubh)}(hjh]hi}(hj$OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjOubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj?OhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhjOubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj)}(hhh]j9)}(h long valueh]h long value}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjPh]hatomic_long_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjPubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj6PhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj2PhMhj3Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj2PhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjXPh]h Description}(hjZPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVPubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjnPhhhNhNubjz)}(h**v**h]hv}(hjvPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnPubh to (}(hjnPhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnPubh ^ }(hjnPhhhNhNubjz)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnPubh) with acquire ordering.}(hjnPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_acquire() elsewhere.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj9)}(h **Return**h]jz)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj9)}(hThe original value of **v**.h](hThe original value of }(hjPhhhNhNubjz)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_release (C function)#c.raw_atomic_long_fetch_xor_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_xor_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_xor_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj*QhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQhhhj)QhMubh)}(h!raw_atomic_long_fetch_xor_releaseh]h)}(h!raw_atomic_long_fetch_xor_releaseh]h!raw_atomic_long_fetch_xor_release}(hjQsb#c.raw_atomic_long_fetch_xor_releaseasbuh1hhjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hjh]hv}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjPQubeh}(h]h ]h"]h$]h&]jj uh1jhjQhhhj)QhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjQhhhj)QhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhj)QhMhjQhhubj )}(hhh]j9)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhj)QhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j Rj4j Rj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_xor_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hj4Rh]hlong i}(hj6RhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj2Rubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.Rubj)}(hhh]j9)}(h long valueh]h long value}(hjMRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjIRhMhjJRubah}(h]h ]h"]h$]h&]uh1jhj.Rubeh}(h]h ]h"]h$]h&]uh1jhjIRhMhj+Rubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjmRh]hatomic_long_t *v}(hjoRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkRubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjgRubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjgRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj+Rubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjRhhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh to (}(hjRhhhNhNubjz)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh ^ }(hjRhhhNhNubjz)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubh) with release ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_release() elsewhere.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj9)}(h **Return**h]jz)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj9)}(hThe original value of **v**.h](hThe original value of }(hj*ShhhNhNubjz)}(h**v**h]hv}(hj2ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*Subh.}(hj*ShhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.raw_atomic_long_fetch_xor_relaxed (C function)#c.raw_atomic_long_fetch_xor_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_xor_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_xor_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjkShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgShhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjzShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgShhhjyShMubh)}(h!raw_atomic_long_fetch_xor_relaxedh]h)}(h!raw_atomic_long_fetch_xor_relaxedh]h!raw_atomic_long_fetch_xor_relaxed}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ](jjeh"]h$]h&]jj uh1hhjgShhhjyShMubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hjh]hi}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjSmodnameN classnameNjcjf)}ji]jl)}j_jSsb#c.raw_atomic_long_fetch_xor_relaxedasbuh1hhjSubj=)}(h h]h }(hjShhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubj)}(hjh]h*}(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hjh]hv}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjSubeh}(h]h ]h"]h$]h&]jj uh1jhjgShhhjyShMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjcShhhjyShMubah}(h]j^Sah ](jjeh"]h$]h&]jj)jhuh1hhjyShMhj`Shhubj )}(hhh]j9)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjCThhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj@Thhubah}(h]h ]h"]h$]h&]uh1jhj`ShhhjyShMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j[Tj4j[Tj5j6j7uh1hhhhj:hNhNubjp)}(hX'**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_xor_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjeTh]h Parameters}(hjgThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcTubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]j?)}(hjTh]hlong i}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj~Tubj)}(hhh]j9)}(h long valueh]h long value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhj~Tubeh}(h]h ]h"]h$]h&]uh1jhjThMhj{Tubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjTh]hatomic_long_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjTubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhj{Tubeh}(h]h ]h"]h$]h&]uh1jhj_Tubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubj9)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjUhhhNhNubjz)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh to (}(hjUhhhNhNubjz)}(h**v**h]hv}(hj(UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh ^ }(hjUhhhNhNubjz)}(h**i**h]hi}(hj:UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubh) with relaxed ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubj9)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_xor_relaxed() elsewhere.}(hjSUhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubj9)}(h **Return**h]jz)}(hjdUh]hReturn}(hjfUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbUubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubj9)}(hThe original value of **v**.h](hThe original value of }(hjzUhhhNhNubjz)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzUubh.}(hjzUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj_Tubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!raw_atomic_long_xchg (C function)c.raw_atomic_long_xchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(h6long raw_atomic_long_xchg (atomic_long_t *v, long new)h]h)}(h5long raw_atomic_long_xchg(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUhhhjUhMubh)}(hraw_atomic_long_xchgh]h)}(hraw_atomic_long_xchgh]hraw_atomic_long_xchg}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ](jjeh"]h$]h&]jj uh1hhjUhhhjUhMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_jUsbc.raw_atomic_long_xchgasbuh1hhjUubj=)}(h h]h }(hjVhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUubj)}(hjh]h*}(hj)VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hjh]hv}(hj6VhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubj&)}(hlong newh](j)}(hlongh]hlong}(hjNVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJVubj=)}(h h]h }(hj\VhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjJVubh)}(hnewh]hnew}(hjjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJVubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjUubeh}(h]h ]h"]h$]h&]jj uh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1hhjUhMhjUhhubj )}(hhh]j9)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jVj4jVj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with full ordering. Safe to use in noinstr code; prefer atomic_long_xchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjVh]hatomic_long_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjWh]hlong new}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Wubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjWubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj'WhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#WhMhj$Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhj#WhMhjVubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjIWh]h Description}(hjKWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGWubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hj_WhhhNhNubjz)}(h**v**h]hv}(hjgWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_Wubh to }(hj_WhhhNhNubjz)}(h**new**h]hnew}(hjyWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_Wubh with full ordering.}(hj_WhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(h **Return**h]jz)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(hThe original value of **v**.h](hThe original value of }(hjWhhhNhNubjz)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_acquire (C function)c.raw_atomic_long_xchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long raw_atomic_long_xchg_acquire (atomic_long_t *v, long new)h]h)}(h=long raw_atomic_long_xchg_acquire(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj XhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjWhhhjXhMubh)}(hraw_atomic_long_xchg_acquireh]h)}(hraw_atomic_long_xchg_acquireh]hraw_atomic_long_xchg_acquire}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhjWhhhjXhMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj:XhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7Xubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjhjYubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-YhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)YhMhj*Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhj)YhMhj Yubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjMYh]hlong new}(hjOYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKYubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjGYubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjfYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbYhMhjcYubah}(h]h ]h"]h$]h&]uh1jhjGYubeh}(h]h ]h"]h$]h&]uh1jhjbYhMhj Yubeh}(h]h ]h"]h$]h&]uh1jhjXubj9)}(h**Description**h]jz)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubj9)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hjYhhhNhNubjz)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh to }(hjYhhhNhNubjz)}(h**new**h]hnew}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh with acquire ordering.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubj9)}(hISafe to use in noinstr code; prefer atomic_long_xchg_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_xchg_acquire() elsewhere.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubj9)}(h **Return**h]jz)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubj9)}(hThe original value of **v**.h](hThe original value of }(hjYhhhNhNubjz)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_release (C function)c.raw_atomic_long_xchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long raw_atomic_long_xchg_release (atomic_long_t *v, long new)h]h)}(h=long raw_atomic_long_xchg_release(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj9ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Zhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjHZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ZhhhjGZhMubh)}(hraw_atomic_long_xchg_releaseh]h)}(hraw_atomic_long_xchg_releaseh]hraw_atomic_long_xchg_release}(hjZZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVZubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5ZhhhjGZhMubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjyZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvZubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj{ZmodnameN classnameNjcjf)}ji]jl)}j_j\Zsbc.raw_atomic_long_xchg_releaseasbuh1hhjrZubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjrZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrZubh)}(hjh]hv}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrZubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnZubj&)}(hlong newh](j)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZubh)}(hnewh]hnew}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjnZubeh}(h]h ]h"]h$]h&]jj uh1jhj5ZhhhjGZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1ZhhhjGZhMubah}(h]j,Zah ](jjeh"]h$]h&]jj)jhuh1hhjGZhMhj.Zhhubj )}(hhh]j9)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1jhj.ZhhhjGZhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*[j4j*[j5j6j7uh1hhhhj:hNhNubjp)}(hX&**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with release ordering. Safe to use in noinstr code; prefer atomic_long_xchg_release() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj4[h]h Parameters}(hj6[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2[ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.[ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjS[h]hatomic_long_t *v}(hjU[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQ[ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjM[ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjl[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjh[hMhji[ubah}(h]h ]h"]h$]h&]uh1jhjM[ubeh}(h]h ]h"]h$]h&]uh1jhjh[hMhjJ[ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj[h]hlong new}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj[ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjJ[ubeh}(h]h ]h"]h$]h&]uh1jhj.[ubj9)}(h**Description**h]jz)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.[ubj9)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hj[hhhNhNubjz)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh to }(hj[hhhNhNubjz)}(h**new**h]hnew}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubh with release ordering.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.[ubj9)}(hISafe to use in noinstr code; prefer atomic_long_xchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_xchg_release() elsewhere.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj.[ubj9)}(h **Return**h]jz)}(hj!\h]hReturn}(hj#\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hj.[ubj9)}(hThe original value of **v**.h](hThe original value of }(hj7\hhhNhNubjz)}(h**v**h]hv}(hj?\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7\ubh.}(hj7\hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj.[ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_xchg_relaxed (C function)c.raw_atomic_long_xchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h>long raw_atomic_long_xchg_relaxed (atomic_long_t *v, long new)h]h)}(h=long raw_atomic_long_xchg_relaxed(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjx\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt\hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjt\hhhj\hM0ubh)}(hraw_atomic_long_xchg_relaxedh]h)}(hraw_atomic_long_xchg_relaxedh]hraw_atomic_long_xchg_relaxed}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjt\hhhj\hM0ubj )}(h(atomic_long_t *v, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj\modnameN classnameNjcjf)}ji]jl)}j_j\sbc.raw_atomic_long_xchg_relaxedasbuh1hhj\ubj=)}(h h]h }(hj\hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hjh]hv}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubj&)}(hlong newh](j)}(hlongh]hlong}(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj=)}(h h]h }(hj]hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj]ubh)}(hnewh]hnew}(hj']hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj\ubeh}(h]h ]h"]h$]h&]jj uh1jhjt\hhhj\hM0ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjp\hhhj\hM0ubah}(h]jk\ah ](jjeh"]h$]h&]jj)jhuh1hhj\hM0hjm\hhubj )}(hhh]j9)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hjQ]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hjN]hhubah}(h]h ]h"]h$]h&]uh1jhjm\hhhj\hM0ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3ji]j4ji]j5j6j7uh1hhhhj:hNhNubjp)}(hX&**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_xchg_relaxed() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjs]h]h Parameters}(hju]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq]ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjm]ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj]h]hatomic_long_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hj]ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hM1hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM1hj]ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj]h]hlong new}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM2hj]ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj]hM2hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM2hj]ubeh}(h]h ]h"]h$]h&]uh1jhjm]ubj9)}(h**Description**h]jz)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjm]ubj9)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hj^hhhNhNubjz)}(h**v**h]hv}(hj$^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh to }(hj^hhhNhNubjz)}(h**new**h]hnew}(hj6^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubh with relaxed ordering.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM3hjm]ubj9)}(hISafe to use in noinstr code; prefer atomic_long_xchg_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_xchg_relaxed() elsewhere.}(hjO^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hjm]ubj9)}(h **Return**h]jz)}(hj`^h]hReturn}(hjb^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^^ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hjm]ubj9)}(hThe original value of **v**.h](hThe original value of }(hjv^hhhNhNubjz)}(h**v**h]hv}(hj~^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjv^ubh.}(hjv^hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjm]ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$raw_atomic_long_cmpxchg (C function)c.raw_atomic_long_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(hClong raw_atomic_long_cmpxchg (atomic_long_t *v, long old, long new)h]h)}(hBlong raw_atomic_long_cmpxchg(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^hhhj^hMEubh)}(hraw_atomic_long_cmpxchgh]h)}(hraw_atomic_long_cmpxchgh]hraw_atomic_long_cmpxchg}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj^hhhj^hMEubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj^modnameN classnameNjcjf)}ji]jl)}j_j^sbc.raw_atomic_long_cmpxchgasbuh1hhj^ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^ubj)}(hjh]h*}(hj%_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hjh]hv}(hj2_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hlong oldh](j)}(hlongh]hlong}(hjJ_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF_ubj=)}(h h]h }(hjX_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjF_ubh)}(holdh]hold}(hjf_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubj&)}(hlong newh](j)}(hlongh]hlong}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{_ubj=)}(h h]h }(hj_hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{_ubh)}(hnewh]hnew}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj^ubeh}(h]h ]h"]h$]h&]jj uh1jhj^hhhj^hMEubeh}(h]h ]h"]h$]h&]jj juh1hjjhj^hhhj^hMEubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1hhj^hMEhj^hhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMEubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j_j4j_j5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj_ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj`h]hatomic_long_t *v}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj`ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMFhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMFhj_ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hj?`h]hlong old}(hjA`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj=`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMGhj9`ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjX`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjT`hMGhjU`ubah}(h]h ]h"]h$]h&]uh1jhj9`ubeh}(h]h ]h"]h$]h&]uh1jhjT`hMGhj_ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjx`h]hlong new}(hjz`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjv`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMHhjr`ubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMHhj`ubah}(h]h ]h"]h$]h&]uh1jhjr`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMHhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubj9)}(h**Description**h]jz)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhj_ubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh == }(hj`hhhNhNubjz)}(h**old**h]hold}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh), atomically updates }(hj`hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh to }(hj`hhhNhNubjz)}(h**new**h]hnew}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh with full ordering. Otherwise, }(hj`hhhNhNubjz)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubh2 is not modified and relaxed ordering is provided.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj_ubj9)}(hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.}(hj2ahhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhj_ubj9)}(h **Return**h]jz)}(hjCah]hReturn}(hjEahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAaubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj_ubj9)}(hThe original value of **v**.h](hThe original value of }(hjYahhhNhNubjz)}(h**v**h]hv}(hjaahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYaubh.}(hjYahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_cmpxchg_acquire (C function)!c.raw_atomic_long_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hKlong raw_atomic_long_cmpxchg_acquire (atomic_long_t *v, long old, long new)h]h)}(hJlong raw_atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\ubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjahhhjahM\ubh)}(hraw_atomic_long_cmpxchg_acquireh]h)}(hraw_atomic_long_cmpxchg_acquireh]hraw_atomic_long_cmpxchg_acquire}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ](jjeh"]h$]h&]jj uh1hhjahhhjahM\ubj )}(h&(atomic_long_t *v, long old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjamodnameN classnameNjcjf)}ji]jl)}j_jasb!c.raw_atomic_long_cmpxchg_acquireasbuh1hhjaubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hjh]hv}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(hlong oldh](j)}(hlongh]hlong}(hj-bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)bubj=)}(h h]h }(hj;bhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)bubh)}(holdh]hold}(hjIbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)bubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubj&)}(hlong newh](j)}(hlongh]hlong}(hjbbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^bubj=)}(h h]h }(hjpbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^bubh)}(hnewh]hnew}(hj~bhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^bubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjaubeh}(h]h ]h"]h$]h&]jj uh1jhjahhhjahM\ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjahM\ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1hhjahM\hjahhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\hjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahM\ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jbj4jbj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_cmpxchg_acquire() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjbubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjbh]hatomic_long_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjbubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhM]hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM]hjbubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hj"ch]hlong old}(hj$chhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj cubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjcubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hj;chhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7chM^hj8cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj7chM^hjbubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj[ch]hlong new}(hj]chhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYcubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjUcubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjtchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpchM_hjqcubah}(h]h ]h"]h$]h&]uh1jhjUcubeh}(h]h ]h"]h$]h&]uh1jhjpchM_hjbubeh}(h]h ]h"]h$]h&]uh1jhjbubj9)}(h**Description**h]jz)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjbubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjchhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh == }(hjchhhNhNubjz)}(h**old**h]hold}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh), atomically updates }(hjchhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh to }(hjchhhNhNubjz)}(h**new**h]hnew}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh# with acquire ordering. Otherwise, }(hjchhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh2 is not modified and relaxed ordering is provided.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjbubj9)}(hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_acquire() elsewhere.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjbubj9)}(h **Return**h]jz)}(hj&dh]hReturn}(hj(dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$dubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehjbubj9)}(hThe original value of **v**.h](hThe original value of }(hjhjeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjeubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehMthjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMthjeubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hjfh]hlong old}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjfubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjeubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjfhMuhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhMuhjeubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj>fh]hlong new}(hj@fhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhjhubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]j?)}(hjhh]hlong old}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjhubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj!ih]hlong new}(hj#ihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjiubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj:ihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6ihMhj7iubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj6ihMhjhubeh}(h]h ]h"]h$]h&]uh1jhjhubj9)}(h**Description**h]jz)}(hj\ih]h Description}(hj^ihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZiubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjrihhhNhNubjz)}(h**v**h]hv}(hjzihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjriubh == }(hjrihhhNhNubjz)}(h**old**h]hold}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjriubh), atomically updates }(hjrihhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjriubh to }(hjrihhhNhNubjz)}(h**new**h]hnew}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjriubh# with relaxed ordering. Otherwise, }(hjrihhhNhNubjz)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjriubh2 is not modified and relaxed ordering is provided.}(hjrihhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj9)}(hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_cmpxchg_relaxed() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj9)}(h **Return**h]jz)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubj9)}(hThe original value of **v**.h](hThe original value of }(hjjhhhNhNubjz)}(h**v**h]hv}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(raw_atomic_long_try_cmpxchg (C function)c.raw_atomic_long_try_cmpxchghNtauh1hhj:hhhNhNubh)}(hhh](h)}(hHbool raw_atomic_long_try_cmpxchg (atomic_long_t *v, long *old, long new)h]h)}(hGbool raw_atomic_long_try_cmpxchg(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjCjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?jhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjQjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?jhhhjPjhMubh)}(hraw_atomic_long_try_cmpxchgh]h)}(hraw_atomic_long_try_cmpxchgh]hraw_atomic_long_try_cmpxchg}(hjcjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_jubah}(h]h ](jjeh"]h$]h&]jj uh1hhj?jhhhjPjhMubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjjmodnameN classnameNjcjf)}ji]jl)}j_jejsbc.raw_atomic_long_try_cmpxchgasbuh1hhj{jubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{jubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{jubh)}(hjh]hv}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{jubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwjubj&)}(h long *oldh](j)}(hlongh]hlong}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj=)}(h h]h }(hjjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(holdh]hold}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwjubj&)}(hlong newh](j)}(hlongh]hlong}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj=)}(h h]h }(hj%khhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubh)}(hnewh]hnew}(hj3khhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjwjubeh}(h]h ]h"]h$]h&]jj uh1jhj?jhhhjPjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj;jhhhjPjhMubah}(h]j6jah ](jjeh"]h$]h&]jj)jhuh1hhjPjhMhj8jhhubj )}(hhh]j9)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj]khhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZkhhubah}(h]h ]h"]h$]h&]uh1jhj8jhhhjPjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jukj4jukj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}kubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjkh]hatomic_long_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hjkh]h long *old}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjkubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjlh]hlong new}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj lubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hj)lhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%lhMhj&lubah}(h]h ]h"]h$]h&]uh1jhj lubeh}(h]h ]h"]h$]h&]uh1jhj%lhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjykubj9)}(h**Description**h]jz)}(hjKlh]h Description}(hjMlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIlubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjalhhhNhNubjz)}(h**v**h]hv}(hjilhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh == }(hjalhhhNhNubjz)}(h**old**h]hold}(hj{lhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh), atomically updates }(hjalhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh to }(hjalhhhNhNubjz)}(h**new**h]hnew}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh with full ordering. Otherwise, }(hjalhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh is not modified, }(hjalhhhNhNubjz)}(h**old**h]hold}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh$ is updated to the current value of }(hjalhhhNhNubjz)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjalubh#, and relaxed ordering is provided.}(hjalhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubj9)}(hHSafe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_long_try_cmpxchg() elsewhere.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubj9)}(h **Return**h]jz)}(hjlh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh if the exchange occurred, }(hjmhhhNhNubjz)}(h **false**h]hfalse}(hj+mhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubh otherwise.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjykubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_acquire (C function)%c.raw_atomic_long_try_cmpxchg_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hPbool raw_atomic_long_try_cmpxchg_acquire (atomic_long_t *v, long *old, long new)h]h)}(hObool raw_atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjdmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`mhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjrmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`mhhhjqmhMubh)}(h#raw_atomic_long_try_cmpxchg_acquireh]h)}(h#raw_atomic_long_try_cmpxchg_acquireh]h#raw_atomic_long_try_cmpxchg_acquire}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ](jjeh"]h$]h&]jj uh1hhj`mhhhjqmhMubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl)}j_jmsb%c.raw_atomic_long_try_cmpxchg_acquireasbuh1hhjmubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hjh]hv}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(h long *oldh](j)}(hlongh]hlong}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj=)}(h h]h }(hjnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(holdh]hold}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubj&)}(hlong newh](j)}(hlongh]hlong}(hj8nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4nubj=)}(h h]h }(hjFnhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4nubh)}(hnewh]hnew}(hjTnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4nubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjmubeh}(h]h ]h"]h$]h&]jj uh1jhj`mhhhjqmhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj\mhhhjqmhMubah}(h]jWmah ](jjeh"]h$]h&]jj)jhuh1hhjqmhMhjYmhhubj )}(hhh]j9)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj~nhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj{nhhubah}(h]h ]h"]h$]h&]uh1jhjYmhhhjqmhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jnj4jnj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjnh]hatomic_long_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjnubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hjnh]h long *old}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjnubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj ohMhjoubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhj ohMhjnubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hj1oh]hlong new}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj/oubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj+oubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjJohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjFohMhjGoubah}(h]h ]h"]h$]h&]uh1jhj+oubeh}(h]h ]h"]h$]h&]uh1jhjFohMhjnubeh}(h]h ]h"]h$]h&]uh1jhjnubj9)}(h**Description**h]jz)}(hjloh]h Description}(hjnohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjoubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjohhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh == }(hjohhhNhNubjz)}(h**old**h]hold}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh), atomically updates }(hjohhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh to }(hjohhhNhNubjz)}(h**new**h]hnew}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh# with acquire ordering. Otherwise, }(hjohhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh is not modified, }(hjohhhNhNubjz)}(h**old**h]hold}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh$ is updated to the current value of }(hjohhhNhNubjz)}(h**v**h]hv}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubh#, and relaxed ordering is provided.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_acquire() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(h **Return**h]jz)}(hj ph]hReturn}(hj"phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj:phhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6pubh if the exchange occurred, }(hj6phhhNhNubjz)}(h **false**h]hfalse}(hjLphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6pubh otherwise.}(hj6phhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_release (C function)%c.raw_atomic_long_try_cmpxchg_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hPbool raw_atomic_long_try_cmpxchg_release (atomic_long_t *v, long *old, long new)h]h)}(hObool raw_atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjphhhjphMubh)}(h#raw_atomic_long_try_cmpxchg_releaseh]h)}(h#raw_atomic_long_try_cmpxchg_releaseh]h#raw_atomic_long_try_cmpxchg_release}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjphhhjphMubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjpmodnameN classnameNjcjf)}ji]jl)}j_jpsb%c.raw_atomic_long_try_cmpxchg_releaseasbuh1hhjpubj=)}(h h]h }(hjphhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hjh]hv}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubj&)}(h long *oldh](j)}(hlongh]hlong}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj=)}(h h]h }(hj%qhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjqubj)}(hjh]h*}(hj3qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(holdh]hold}(hj@qhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubj&)}(hlong newh](j)}(hlongh]hlong}(hjYqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUqubj=)}(h h]h }(hjgqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjUqubh)}(hnewh]hnew}(hjuqhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUqubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubeh}(h]h ]h"]h$]h&]jj uh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}phhhjphMubah}(h]jxpah ](jjeh"]h$]h&]jj)jhuh1hhjphMhjzphhubj )}(hhh]j9)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjzphhhjphMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jqj4jqj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjqh]hatomic_long_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjqubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hjrh]h long *old}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjrubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj2rhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.rhMhj/rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj.rhMhjqubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjRrh]hlong new}(hjTrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPrubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjLrubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjkrhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjgrhMhjhrubah}(h]h ]h"]h$]h&]uh1jhjLrubeh}(h]h ]h"]h$]h&]uh1jhjgrhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubj9)}(h**Description**h]jz)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh == }(hjrhhhNhNubjz)}(h**old**h]hold}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh), atomically updates }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh to }(hjrhhhNhNubjz)}(h**new**h]hnew}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh# with release ordering. Otherwise, }(hjrhhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh is not modified, }(hjrhhhNhNubjz)}(h**old**h]hold}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh$ is updated to the current value of }(hjrhhhNhNubjz)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubh#, and relaxed ordering is provided.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj9)}(hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_release() elsewhere.}(hj0shhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj9)}(h **Return**h]jz)}(hjAsh]hReturn}(hjCshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?subah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj[shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWsubh if the exchange occurred, }(hjWshhhNhNubjz)}(h **false**h]hfalse}(hjmshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWsubh otherwise.}(hjWshhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_try_cmpxchg_relaxed (C function)%c.raw_atomic_long_try_cmpxchg_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hPbool raw_atomic_long_try_cmpxchg_relaxed (atomic_long_t *v, long *old, long new)h]h)}(hObool raw_atomic_long_try_cmpxchg_relaxed(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjshhhjshMubh)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h)}(h#raw_atomic_long_try_cmpxchg_relaxedh]h#raw_atomic_long_try_cmpxchg_relaxed}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ](jjeh"]h$]h&]jj uh1hhjshhhjshMubj )}(h'(atomic_long_t *v, long *old, long new)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjsmodnameN classnameNjcjf)}ji]jl)}j_jssb%c.raw_atomic_long_try_cmpxchg_relaxedasbuh1hhjsubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjsubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hjh]hv}(hj thhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjsubj&)}(h long *oldh](j)}(hlongh]hlong}(hj8thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4tubj=)}(h h]h }(hjFthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj4tubj)}(hjh]h*}(hjTthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4tubh)}(holdh]hold}(hjathhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4tubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjsubj&)}(hlong newh](j)}(hlongh]hlong}(hjzthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvtubj=)}(h h]h }(hjthhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjvtubh)}(hnewh]hnew}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjvtubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjsubeh}(h]h ]h"]h$]h&]jj uh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1hhjshMhjshhubj )}(hhh]j9)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtj4jtj5j6j7uh1hhhhj:hNhNubjp)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjuh]hatomic_long_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjtubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjtubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]j?)}(hj:uh]h long *old}(hjhj8uubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj4uubj)}(hhh]j9)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hjSuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjOuhMhjPuubah}(h]h ]h"]h$]h&]uh1jhj4uubeh}(h]h ]h"]h$]h&]uh1jhjOuhMhjtubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]j?)}(hjsuh]hlong new}(hjuuhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjquubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmuubj)}(hhh]j9)}(hlong value to assignh]hlong value to assign}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjmuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubj9)}(h**Description**h]jz)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj9)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjuhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh == }(hjuhhhNhNubjz)}(h**old**h]hold}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh), atomically updates }(hjuhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh to }(hjuhhhNhNubjz)}(h**new**h]hnew}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh# with relaxed ordering. Otherwise, }(hjuhhhNhNubjz)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh is not modified, }(hjuhhhNhNubjz)}(h**old**h]hold}(hj&vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh$ is updated to the current value of }(hjuhhhNhNubjz)}(h**v**h]hv}(hj8vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubh#, and relaxed ordering is provided.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj9)}(hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_try_cmpxchg_relaxed() elsewhere.}(hjQvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj9)}(h **Return**h]jz)}(hjbvh]hReturn}(hjdvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`vubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubj9)}(h7**true** if the exchange occurred, **false** otherwise.h](jz)}(h**true**h]htrue}(hj|vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxvubh if the exchange occurred, }(hjxvhhhNhNubjz)}(h **false**h]hfalse}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxvubh otherwise.}(hjxvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_sub_and_test (C function)c.raw_atomic_long_sub_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hhjwubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj)}(hhh]j9)}(hlong value to subtracth]hlong value to subtract}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjwubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjxh]hatomic_long_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjxubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj1xhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj-xhMhj.xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj-xhMhjwubeh}(h]h ]h"]h$]h&]uh1jhjwubj9)}(h**Description**h]jz)}(hjSxh]h Description}(hjUxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQxubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj9)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjixhhhNhNubjz)}(h**v**h]hv}(hjqxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjixubh to (}(hjixhhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjixubh - }(hjixhhhNhNubjz)}(h**i**h]hi}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjixubh) with full ordering.}(hjixhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj9)}(hISafe to use in noinstr code; prefer atomic_long_sub_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_sub_and_test() elsewhere.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj9)}(h **Return**h]jz)}(hjxh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubh if the resulting value of }(hjxhhhNhNubjz)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubh is zero, }(hjxhhhNhNubjz)}(h **false**h]hfalse}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubh otherwise.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_dec_and_test (C function)c.raw_atomic_long_dec_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4bool raw_atomic_long_dec_and_test (atomic_long_t *v)h]h)}(h3bool raw_atomic_long_dec_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hj6yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2yhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjDyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2yhhhjCyhMubh)}(hraw_atomic_long_dec_and_testh]h)}(hraw_atomic_long_dec_and_testh]hraw_atomic_long_dec_and_test}(hjVyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRyubah}(h]h ](jjeh"]h$]h&]jj uh1hhj2yhhhjCyhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjuyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjryubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjwymodnameN classnameNjcjf)}ji]jl)}j_jXysbc.raw_atomic_long_dec_and_testasbuh1hhjnyubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnyubh)}(hjh]hv}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnyubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjjyubah}(h]h ]h"]h$]h&]jj uh1jhj2yhhhjCyhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj.yhhhjCyhMubah}(h]j)yah ](jjeh"]h$]h&]jj)jhuh1hhjCyhMhj+yhhubj )}(hhh]j9)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyhhubah}(h]h ]h"]h$]h&]uh1jhj+yhhhjCyhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyj4jyj5j6j7uh1hhhhj:hNhNubjp)}(hX,**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjzh]hatomic_long_t *v}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjzubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj3zhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/zhMhj0zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj/zhMhjzubah}(h]h ]h"]h$]h&]uh1jhjyubj9)}(h**Description**h]jz)}(hjUzh]h Description}(hjWzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSzubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj9)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjkzhhhNhNubjz)}(h**v**h]hv}(hjszhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkzubh to (}(hjkzhhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkzubh - 1) with full ordering.}(hjkzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj9)}(hISafe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_dec_and_test() elsewhere.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj9)}(h **Return**h]jz)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh if the resulting value of }(hjzhhhNhNubjz)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh is zero, }(hjzhhhNhNubjz)}(h **false**h]hfalse}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubh otherwise.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_inc_and_test (C function)c.raw_atomic_long_inc_and_testhNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4bool raw_atomic_long_inc_and_test (atomic_long_t *v)h]h)}(h3bool raw_atomic_long_inc_and_test(atomic_long_t *v)h](j)}(hjh]hbool}(hj&{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"{hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*ubj=)}(h h]h }(hj4{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"{hhhj3{hM*ubh)}(hraw_atomic_long_inc_and_testh]h)}(hraw_atomic_long_inc_and_testh]hraw_atomic_long_inc_and_test}(hjF{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjB{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"{hhhj3{hM*ubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hje{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjb{ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjg{modnameN classnameNjcjf)}ji]jl)}j_jH{sbc.raw_atomic_long_inc_and_testasbuh1hhj^{ubj=)}(h h]h }(hj{hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj^{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^{ubh)}(hjh]hv}(hj{hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^{ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjZ{ubah}(h]h ]h"]h$]h&]jj uh1jhj"{hhhj3{hM*ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj{hhhj3{hM*ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhj3{hM*hj{hhubj )}(hhh]j9)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hj{hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj3{hM*ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{j4j{j5j6j7uh1hhhhj:hNhNubjp)}(hX,**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM.hj{ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hj |h]hatomic_long_t *v}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj|ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hj|ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj#|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|hM+hj |ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hM+hj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hjE|h]h Description}(hjG|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC|ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hj{ubj9)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj[|hhhNhNubjz)}(h**v**h]hv}(hjc|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[|ubh to (}(hj[|hhhNhNubjz)}(h**v**h]hv}(hju|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[|ubh + 1) with full ordering.}(hj[|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj{ubj9)}(hISafe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_inc_and_test() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM.hj{ubj9)}(h **Return**h]jz)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hj{ubj9)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](jz)}(h**true**h]htrue}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh if the resulting value of }(hj|hhhNhNubjz)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh is zero, }(hj|hhhNhNubjz)}(h **false**h]hfalse}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh otherwise.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_add_negative (C function)c.raw_atomic_long_add_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hubj=)}(h h]h }(hj$}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}hhhj#}hM>ubh)}(hraw_atomic_long_add_negativeh]h)}(hraw_atomic_long_add_negativeh]hraw_atomic_long_add_negative}(hj6}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj}hhhj#}hM>ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjR}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN}ubj=)}(h h]h }(hj`}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjN}ubh)}(hjh]hi}(hjn}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjN}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJ}ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj}modnameN classnameNjcjf)}ji]jl)}j_j8}sbc.raw_atomic_long_add_negativeasbuh1hhj}ubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hjh]hv}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjJ}ubeh}(h]h ]h"]h$]h&]jj uh1jhj}hhhj#}hM>ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhj#}hM>ubah}(h]j }ah ](jjeh"]h$]h&]jj)jhuh1hhj#}hM>hj }hhubj )}(hhh]j9)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hj}hhubah}(h]h ]h"]h$]h&]uh1jhj }hhhj#}hM>ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j~j4j~j5j6j7uh1hhhhj:hNhNubjp)}(hXT**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_add_negative() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ~ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj ~ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj.~h]hlong i}(hj0~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,~ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hj(~ubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjG~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjC~hM?hjD~ubah}(h]h ]h"]h$]h&]uh1jhj(~ubeh}(h]h ]h"]h$]h&]uh1jhjC~hM?hj%~ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjg~h]hatomic_long_t *v}(hji~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hje~ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hja~ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj|~hM@hj}~ubah}(h]h ]h"]h$]h&]uh1jhja~ubeh}(h]h ]h"]h$]h&]uh1jhj|~hM@hj%~ubeh}(h]h ]h"]h$]h&]uh1jhj ~ubj9)}(h**Description**h]jz)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj ~ubj9)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj~hhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh to (}(hj~hhhNhNubjz)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh + }(hj~hhhNhNubjz)}(h**i**h]hi}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh) with full ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhj ~ubj9)}(hISafe to use in noinstr code; prefer atomic_long_add_negative() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_add_negative() elsewhere.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMChj ~ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhj ~ubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh if the resulting value of }(hj$hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh is negative, }(hj$hhhNhNubjz)}(h **false**h]hfalse}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh otherwise.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj ~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_acquire (C function)&c.raw_atomic_long_add_negative_acquirehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_long_add_negative_acquire (long i, atomic_long_t *v)h]h)}(hCbool raw_atomic_long_add_negative_acquire(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMSubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMSubh)}(h$raw_atomic_long_add_negative_acquireh]h)}(h$raw_atomic_long_add_negative_acquireh]h$raw_atomic_long_add_negative_acquire}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMSubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb&c.raw_atomic_long_add_negative_acquireasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhj}hhhjhMSubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1hhjhMShjzhhubj )}(hhh]j9)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjYhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhMSubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jtj4jtj5j6j7uh1hhhhj:hNhNubjp)}(hX_**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_add_negative_acquire() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjxubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjրh]hatomic_long_t *v}(hj؀hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԀubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjЀubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjЀubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjxubj9)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj'hhhNhNubjz)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh to (}(hj'hhhNhNubjz)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh + }(hj'hhhNhNubjz)}(h**i**h]hi}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh) with acquire ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjxubj9)}(hQSafe to use in noinstr code; prefer atomic_long_add_negative_acquire() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_add_negative_acquire() elsewhere.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMXhjxubj9)}(h **Return**h]jz)}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjxubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM[hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_release (C function)&c.raw_atomic_long_add_negative_releasehNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_long_add_negative_release (long i, atomic_long_t *v)h]h)}(hCbool raw_atomic_long_add_negative_release(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMhubh)}(h$raw_atomic_long_add_negative_releaseh]h)}(h$raw_atomic_long_add_negative_releaseh]h$raw_atomic_long_add_negative_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMhubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubh)}(hjh]hi}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjghhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjimodnameN classnameNjcjf)}ji]jl)}j_jsb&c.raw_atomic_long_add_negative_releaseasbuh1hhj`ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMhubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMhubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhhjhhubj )}(hhh]j9)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj˂hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjȂhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMhubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX_**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_add_negative_release() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj h]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihjubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj!hMihj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMihjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjEh]hatomic_long_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhj?ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjZhMjhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubj9)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubj9)}(hQSafe to use in noinstr code; prefer atomic_long_add_negative_release() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_add_negative_release() elsewhere.}(hjۃhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMmhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the resulting value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is negative, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ1raw_atomic_long_add_negative_relaxed (C function)&c.raw_atomic_long_add_negative_relaxedhNtauh1hhj:hhhNhNubh)}(hhh](h)}(hDbool raw_atomic_long_add_negative_relaxed (long i, atomic_long_t *v)h]h)}(hCbool raw_atomic_long_add_negative_relaxed(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}ubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_hhhjphM}ubh)}(h$raw_atomic_long_add_negative_relaxedh]h)}(h$raw_atomic_long_add_negative_relaxedh]h$raw_atomic_long_add_negative_relaxed}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjphM}ubj )}(h(long i, atomic_long_t *v)h](j&)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hjh]hi}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjքhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjӄubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj؄modnameN classnameNjcjf)}ji]jl)}j_jsb&c.raw_atomic_long_add_negative_relaxedasbuh1hhjτubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjτubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjτubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjτubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj_hhhjphM}ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjphM}ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjphM}hjXhhubj )}(hhh]j9)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hj7hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjphM}ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj:hNhNubjp)}(hX_**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_add_negative_relaxed() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]j?)}(hj{h]hlong i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjyubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjuubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjrubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjͅhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjɅhMhjʅubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɅhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**i**h]hi}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(hQSafe to use in noinstr code; prefer atomic_long_add_negative_relaxed() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_add_negative_relaxed() elsewhere.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(h **Return**h]jz)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj9)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](jz)}(h**true**h]htrue}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh if the resulting value of }(hjqhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh is negative, }(hjqhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh otherwise.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-raw_atomic_long_fetch_add_unless (C function)"c.raw_atomic_long_fetch_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(hHlong raw_atomic_long_fetch_add_unless (atomic_long_t *v, long a, long u)h]h)}(hGlong raw_atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)h](j)}(hlongh]hlong}(hj҆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΆhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjΆhhhjhMubh)}(h raw_atomic_long_fetch_add_unlessh]h)}(h raw_atomic_long_fetch_add_unlessh]h raw_atomic_long_fetch_add_unless}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjΆhhhjhMubj )}(h"(atomic_long_t *v, long a, long u)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb"c.raw_atomic_long_fetch_add_unlessasbuh1hhj ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hjh]hv}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ah](j)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjaubh)}(hj;h]ha}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjaubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong uh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjΆhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjʆhhhjhMubah}(h]jņah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjdžhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjއhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjۇhhubah}(h]h ]h"]h$]h&]uh1jhjdžhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long a`` long value to add ``long u`` long value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere. **Return** The original value of **v**.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j?)}(hjXh]hlong a}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j?)}(hjh]hlong u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj̈h]h Description}(hjΈhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʈubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh != }(hjhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh), atomically updates }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh to (}(hjhhhNhNubjz)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh + }(hjhhhNhNubjz)}(h**a**h]ha}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh!) with full ordering. Otherwise, }(hjhhhNhNubjz)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_add_unless() elsewhere.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'raw_atomic_long_add_unless (C function)c.raw_atomic_long_add_unlesshNtauh1hhj:hhhNhNubh)}(hhh](h)}(hBbool raw_atomic_long_add_unless (atomic_long_t *v, long a, long u)h]h)}(hAbool raw_atomic_long_add_unless(atomic_long_t *v, long a, long u)h](j)}(hjh]hbool}(hjʼnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjӉhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj҉hMubh)}(hraw_atomic_long_add_unlessh]h)}(hraw_atomic_long_add_unlessh]hraw_atomic_long_add_unless}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj҉hMubj )}(h"(atomic_long_t *v, long a, long u)h](j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_add_unlessasbuh1hhjubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong ah](j)}(hlongh]hlong}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hj;h]ha}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hlong uh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hj‰h]hu}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj҉hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj҉hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj҉hMhjhhubj )}(hhh]j9)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjЊhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj͊hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj҉hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long a`` long value to add ``long u`` long value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_add_unless() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(h``long a`` long value to add h](j)}(h ``long a``h]j?)}(hjJh]hlong a}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubj)}(hhh]j9)}(hlong value to addh]hlong value to add}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]j?)}(hjh]hlong u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj}ubj)}(hhh]j9)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjԋhhhNhNubjz)}(h**v**h]hv}(hj܋hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh != }(hjԋhhhNhNubjz)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh), atomically updates }(hjԋhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh to (}(hjԋhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh + }(hjԋhhhNhNubjz)}(h**a**h]ha}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh!) with full ordering. Otherwise, }(hjԋhhhNhNubjz)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԋubh2 is not modified and relaxed ordering is provided.}(hjԋhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hGSafe to use in noinstr code; prefer atomic_long_add_unless() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_add_unless() elsewhere.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh if }(hjvhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh was updated, }(hjvhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubh otherwise.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)raw_atomic_long_inc_not_zero (C function)c.raw_atomic_long_inc_not_zerohNtauh1hhj:hhhNhNubh)}(hhh](h)}(h4bool raw_atomic_long_inc_not_zero (atomic_long_t *v)h]h)}(h3bool raw_atomic_long_inc_not_zero(atomic_long_t *v)h](j)}(hjh]hbool}(hj׌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӌhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjӌhhhjhMubh)}(hraw_atomic_long_inc_not_zeroh]h)}(hraw_atomic_long_inc_not_zeroh]hraw_atomic_long_inc_not_zero}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjӌhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.raw_atomic_long_inc_not_zeroasbuh1hhjubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hjh]hv}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjӌhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjόhhhjhMubah}(h]jʌah ](jjeh"]h$]h&]jj)jhuh1hhjhMhǰhhubj )}(hhh]j9)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwhhubah}(h]h ]h"]h$]h&]uh1jhǰhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXm**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_inc_not_zero() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjԍhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjЍhMhjэubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЍhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj hhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh != 0), atomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh% + 1) with full ordering. Otherwise, }(hj hhhNhNubjz)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hISafe to use in noinstr code; prefer atomic_long_inc_not_zero() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_inc_not_zero() elsewhere.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_inc_unless_negative (C function)%c.raw_atomic_long_inc_unless_negativehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h;bool raw_atomic_long_inc_unless_negative (atomic_long_t *v)h]h)}(h:bool raw_atomic_long_inc_unless_negative(atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h#raw_atomic_long_inc_unless_negativeh]h)}(h#raw_atomic_long_inc_unless_negativeh]h#raw_atomic_long_inc_unless_negative}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_j sb%c.raw_atomic_long_inc_unless_negativeasbuh1hhj#ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#ubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hjh]hv}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jގah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXt**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjϏh]hatomic_long_t *v}(hjяhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj͏ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjɏubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɏubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƏubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj hhhNhNubjz)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh >= 0), atomically updates }(hj hhhNhNubjz)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh to (}(hj hhhNhNubjz)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh% + 1) with full ordering. Otherwise, }(hj hhhNhNubjz)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh2 is not modified and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hPSafe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_inc_unless_negative() elsewhere.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjƐhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ0raw_atomic_long_dec_unless_positive (C function)%c.raw_atomic_long_dec_unless_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h;bool raw_atomic_long_dec_unless_positive (atomic_long_t *v)h]h)}(h:bool raw_atomic_long_dec_unless_positive(atomic_long_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj hMubh)}(h#raw_atomic_long_dec_unless_positiveh]h)}(h#raw_atomic_long_dec_unless_positiveh]h#raw_atomic_long_dec_unless_positive}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj@modnameN classnameNjcjf)}ji]jl)}j_j!sb%c.raw_atomic_long_dec_unless_positiveasbuh1hhj7ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hjh]hv}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj3ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj hMhjhhubj )}(hhh]j9)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj:hNhNubjp)}(hXt**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](j9)}(h**Parameters**h]jz)}(hjđh]h Parameters}(hjƑhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj‘ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjݑubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݑubeh}(h]h ]h"]h$]h&]uh1jhjhMhjڑubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj4hhhNhNubjz)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh <= 0), atomically updates }(hj4hhhNhNubjz)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh to (}(hj4hhhNhNubjz)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh% - 1) with full ordering. Otherwise, }(hj4hhhNhNubjz)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh2 is not modified and relaxed ordering is provided.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(hPSafe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere.h]hPSafe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj9)}(h3**true** if **v** was updated, **false** otherwise.h](jz)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**v**h]hv}(hjȒhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh was updated, }(hjhhhNhNubjz)}(h **false**h]hfalse}(hjڒhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ,raw_atomic_long_dec_if_positive (C function)!c.raw_atomic_long_dec_if_positivehNtauh1hhj:hhhNhNubh)}(hhh](h)}(h7long raw_atomic_long_dec_if_positive (atomic_long_t *v)h]h)}(h6long raw_atomic_long_dec_if_positive(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj!hMubh)}(hraw_atomic_long_dec_if_positiveh]h)}(hraw_atomic_long_dec_if_positiveh]hraw_atomic_long_dec_if_positive}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj!hMubj )}(h(atomic_long_t *v)h]j&)}(hatomic_long_t *vh](h)}(hhh]h)}(h atomic_long_th]h atomic_long_t}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjUmodnameN classnameNjcjf)}ji]jl)}j_j6sb!c.raw_atomic_long_dec_if_positiveasbuh1hhjLubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hjh]hv}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjHubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj!hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj!hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj!hMhjhhubj )}(hhh]j9)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jϓj4jϓj5j6j7uh1hhhhj:hNhNubjp)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](j9)}(h**Parameters**h]jz)}(hjٓh]h Parameters}(hjۓhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjדubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]j?)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j9)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjӓubj9)}(h**Description**h]jz)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubj9)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjIhhhNhNubjz)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh > 0), atomically updates }(hjIhhhNhNubjz)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh to (}(hjIhhhNhNubjz)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh% - 1) with full ordering. Otherwise, }(hjIhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubh2 is not modified and relaxed ordering is provided.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubj9)}(hLSafe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubj9)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjǔhhhNhNubjz)}(h**v**h]hv}(hjϔhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǔubh - 1), regardless of whether }(hjǔhhhNhNubjz)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǔubh was updated.}(hjǔhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8he/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjӓubeh}(h]h ] kernelindentah"]h$]h&]uh1johj:hhhNhNubeh}(h]atomicsah ]h"]atomicsah$]h&]uh1hhhhhhhhK^ubh)}(hhh](h)}(hKernel objects manipulationh]hKernel objects manipulation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKjubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_get_path (C function)c.kobject_get_pathhNtauh1hhj hhhNhNubh)}(hhh](h)}(hDchar * kobject_get_path (const struct kobject *kobj, gfp_t gfp_mask)h]h)}(hBchar *kobject_get_path(const struct kobject *kobj, gfp_t gfp_mask)h](j)}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/hhhjAhKubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhKubh)}(hkobject_get_pathh]h)}(hkobject_get_pathh]hkobject_get_path}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhjAhKubj )}(h,(const struct kobject *kobj, gfp_t gfp_mask)h](j&)}(hconst struct kobject *kobjh](j+)}(hj<*h]hconst}(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jcsbc.kobject_get_pathasbuh1hhjyubj=)}(h h]h }(hj֕hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jҕc.kobject_get_pathasbuh1hhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hgfp_maskh]hgfp_mask}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhjAhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhjAhKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhjAhKhj(hhubj )}(hhh]j9)}(h2Allocate memory and fill in the path for **kobj**.h](h)Allocate memory and fill in the path for }(hjchhhNhNubjz)}(h**kobj**h]hkobj}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj`hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``const struct kobject *kobj`` kobject in question, with which to build the path ``gfp_t gfp_mask`` the allocation type used to allocate the path **Return** The newly allocated memory, caller must free with kfree().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh](j)}(hQ``const struct kobject *kobj`` kobject in question, with which to build the path h](j)}(h``const struct kobject *kobj``h]j?)}(hjh]hconst struct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]j9)}(h1kobject in question, with which to build the pathh]h1kobject in question, with which to build the path}(hjϖhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj˖hKhj̖ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˖hKhjubj)}(hA``gfp_t gfp_mask`` the allocation type used to allocate the path h](j)}(h``gfp_t gfp_mask``h]j?)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]j9)}(h-the allocation type used to allocate the pathh]h-the allocation type used to allocate the path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Return**h]jz)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj9)}(h:The newly allocated memory, caller must free with kfree().h]h:The newly allocated memory, caller must free with kfree().}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_set_name (C function)c.kobject_set_namehNtauh1hhj hhhNhNubh)}(hhh](h)}(hAint kobject_set_name (struct kobject *kobj, const char *fmt, ...)h]h)}(h@int kobject_set_name(struct kobject *kobj, const char *fmt, ...)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM,ubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkhhhj}hM,ubh)}(hkobject_set_nameh]h)}(hkobject_set_nameh]hkobject_set_name}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjkhhhj}hM,ubj )}(h,(struct kobject *kobj, const char *fmt, ...)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hjʗhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjǗubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj̗modnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_set_nameasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hfmth]hfmt}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h...h]j)}(hjh]h...}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjkhhhj}hM,ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjghhhj}hM,ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1hhj}hM,hjdhhubj )}(hhh]j9)}(hSet the name of a kobject.h]hSet the name of a kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM,hjhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hM,ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX\**Parameters** ``struct kobject *kobj`` struct kobject to set the name of ``const char *fmt`` format string used to build the name ``...`` variable arguments **Description** This sets the name of the kobject. If you have already added the kobject to the system, you must call kobject_rename() in order to change the name of the kobject.h](j9)}(h**Parameters**h]jz)}(hjƘh]h Parameters}(hjȘhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjĘubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM0hjubj)}(hhh](j)}(h;``struct kobject *kobj`` struct kobject to set the name of h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM-hjߘubj)}(hhh]j9)}(h!struct kobject to set the name ofh]h!struct kobject to set the name of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjߘubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjܘubj)}(h9``const char *fmt`` format string used to build the name h](j)}(h``const char *fmt``h]j?)}(hjh]hconst char *fmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM.hjubj)}(hhh]j9)}(h$format string used to build the nameh]h$format string used to build the name}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hM.hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM.hjܘubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjWh]h...}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjQubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjܘubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj9)}(hThis sets the name of the kobject. If you have already added the kobject to the system, you must call kobject_rename() in order to change the name of the kobject.h]hThis sets the name of the kobject. If you have already added the kobject to the system, you must call kobject_rename() in order to change the name of the kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_init (C function)c.kobject_inithNtauh1hhj hhhNhNubh)}(hhh](h)}(hGvoid kobject_init (struct kobject *kobj, const struct kobj_type *ktype)h]h)}(hFvoid kobject_init(struct kobject *kobj, const struct kobj_type *ktype)h](j)}(hvoidh]hvoid}(hjיhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjәhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjәhhhjhMBubh)}(h kobject_inith]h)}(h kobject_inith]h kobject_init}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjәhhhjhMBubj )}(h5(struct kobject *kobj, const struct kobj_type *ktype)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj!hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj4modnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_initasbuh1hhjubj=)}(h h]h }(hjRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkobjh]hkobj}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(hconst struct kobj_type *ktypeh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kobj_typeh]h kobj_type}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jNc.kobject_initasbuh1hhjubj=)}(h h]h }(hjݚhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hktypeh]hktype}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjәhhhjhMBubeh}(h]h ]h"]h$]h&]jj juh1hjjhjϙhhhjhMBubah}(h]jʙah ](jjeh"]h$]h&]jj)jhuh1hhjhMBhj̙hhubj )}(hhh]j9)}(hInitialize a kobject structure.h]hInitialize a kobject structure.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBhjhhubah}(h]h ]h"]h$]h&]uh1jhj̙hhhjhMBubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct kobject *kobj`` pointer to the kobject to initialize ``const struct kobj_type *ktype`` pointer to the ktype for this kobject. **Description** This function will properly initialize a kobject such that it can then be passed to the kobject_add() call. After this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.h](j9)}(h**Parameters**h]jz)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhj>ubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]j?)}(hjch]hstruct kobject *kobj}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMChj]ubj)}(hhh]j9)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhMChjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMChjZubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]j?)}(hjh]hconst struct kobj_type *ktype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMDhjubj)}(hhh]j9)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubj9)}(h**Description**h]jz)}(hjכh]h Description}(hjٛhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj՛ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhj>ubj9)}(hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.h]hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMEhj>ubj9)}(hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.h]hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMHhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_add (C function) c.kobject_addhNtauh1hhj hhhNhNubh)}(hhh](h)}(hTint kobject_add (struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h]h)}(hSint kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'hhhj9hMzubh)}(h kobject_addh]h)}(h kobject_addh]h kobject_add}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ](jjeh"]h$]h&]jj uh1hhj'hhhj9hMzubj )}(hD(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjdubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jNsb c.kobject_addasbuh1hhjdubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(hstruct kobject *parenth](j+)}(hj.h]hstruct}(hjڜhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj֜ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj֜ubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j c.kobject_addasbuh1hhj֜ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj֜ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֜ubh)}(hparenth]hparent}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֜ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hjJhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjFubj=)}(h h]h }(hjWhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubj)}(hcharh]hchar}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj=)}(h h]h }(hjshhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubj&)}(h...h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hj`ubeh}(h]h ]h"]h$]h&]jj uh1jhj'hhhj9hMzubeh}(h]h ]h"]h$]h&]jj juh1hjjhj#hhhj9hMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj9hMzhj hhubj )}(hhh]j9)}(hThe main kobject add function.h]hThe main kobject add function.}(hjНhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhj͝hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMzubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct kobject *kobj`` the kobject to add ``struct kobject *parent`` pointer to the parent of the kobject. ``const char *fmt`` format to name the kobject with. ``...`` variable arguments **Description** The kobject name is set and added to the kobject hierarchy in this function. If **parent** is set, then the parent of the **kobj** will be set to it. If **parent** is NULL, then the parent of the **kobj** will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree. Note, no "add" uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject's creation. If this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. **Return** If this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubj)}(hhh](j)}(h,``struct kobject *kobj`` the kobject to add h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM{hj ubj)}(hhh]j9)}(hthe kobject to addh]hthe kobject to add}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj&hM{hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM{hjubj)}(hA``struct kobject *parent`` pointer to the parent of the kobject. h](j)}(h``struct kobject *parent``h]j?)}(hjJh]hstruct kobject *parent}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM|hjDubj)}(hhh]j9)}(h%pointer to the parent of the kobject.h]h%pointer to the parent of the kobject.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj_hM|hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hM|hjubj)}(h5``const char *fmt`` format to name the kobject with. h](j)}(h``const char *fmt``h]j?)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hj}ubj)}(hhh]j9)}(h format to name the kobject with.h]h format to name the kobject with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM}hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hj՞hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjўhKhjҞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjўhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj9)}(hLThe kobject name is set and added to the kobject hierarchy in this function.h]hLThe kobject name is set and added to the kobject hierarchy in this function.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubj9)}(hX5If **parent** is set, then the parent of the **kobj** will be set to it. If **parent** is NULL, then the parent of the **kobj** will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree.h](hIf }(hjhhhNhNubjz)}(h **parent**h]hparent}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is set, then the parent of the }(hjhhhNhNubjz)}(h**kobj**h]hkobj}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh will be set to it. If }(hjhhhNhNubjz)}(h **parent**h]hparent}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh! is NULL, then the parent of the }(hjhhhNhNubjz)}(h**kobj**h]hkobj}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(hXNote, no "add" uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject's creation.h]hX Note, no “add” uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject’s creation.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjU)}(hXIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. h](j9)}(hIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object.h]hIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(hIn short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything.h]hIn short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ]h"]h$]h&]uh1jThjhMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h]hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.}(hjŸhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kobject_init_and_add (C function)c.kobject_init_and_addhNtauh1hhj hhhNhNubh)}(hhh](h)}(h|int kobject_init_and_add (struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h]h)}(h{int kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkobject_init_and_addh]h)}(hkobject_init_and_addh]hkobject_init_and_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hc(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hj.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj*ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*ubh)}(hhh]h)}(hkobjecth]hkobject}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjNmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_init_and_addasbuh1hhj*ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(hconst struct kobj_type *ktypeh](j+)}(hj<*/h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjȠhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kobj_typeh]h kobj_type}(hj٠hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj֠ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj۠modnameN classnameNjcjf)}ji]jhc.kobject_init_and_addasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hktypeh]hktype}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(hstruct kobject *parenth](j+)}(hj.h]hstruct}(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj'ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubh)}(hhh]h)}(hkobjecth]hkobject}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jhc.kobject_init_and_addasbuh1hhj'ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj'ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjġhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjҡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hfmth]hfmt}(hjߡhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(h...h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hCInitialize a kobject structure and add it to the kobject hierarchy.h]hCInitialize a kobject structure and add it to the kobject hierarchy.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhj hNhNubjp)}(hXw**Parameters** ``struct kobject *kobj`` pointer to the kobject to initialize ``const struct kobj_type *ktype`` pointer to the ktype for this kobject. ``struct kobject *parent`` pointer to the parent of this kobject. ``const char *fmt`` the name of the kobject. ``...`` variable arguments **Description** This function combines the call to kobject_init() and kobject_add(). If this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.h](j9)}(h**Parameters**h]jz)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj=ubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]j?)}(hjbh]hstruct kobject *kobj}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj\ubj)}(hhh]j9)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjYubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]j?)}(hjh]hconst struct kobj_type *ktype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(hB``struct kobject *parent`` pointer to the parent of this kobject. h](j)}(h``struct kobject *parent``h]j?)}(hjԢh]hstruct kobject *parent}(hj֢hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjҢubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj΢ubj)}(hhh]j9)}(h&pointer to the parent of this kobject.h]h&pointer to the parent of this kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj΢ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjYubj)}(h-``const char *fmt`` the name of the kobject. h](j)}(h``const char *fmt``h]j?)}(hj h]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(hthe name of the kobject.h]hthe name of the kobject.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjYubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjFh]h...}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj@ubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[hKhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj=ubj9)}(hDThis function combines the call to kobject_init() and kobject_add().h]hDThis function combines the call to kobject_init() and kobject_add().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj=ubj9)}(hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.h]hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_rename (C function)c.kobject_renamehNtauh1hhj hhhNhNubh)}(hhh](h)}(h?int kobject_rename (struct kobject *kobj, const char *new_name)h]h)}(h>int kobject_rename(struct kobject *kobj, const char *new_name)h](j)}(hinth]hint}(hjգhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѣhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjѣhhhjhMubh)}(hkobject_renameh]h)}(hkobject_renameh]hkobject_rename}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjѣhhhjhMubj )}(h,(struct kobject *kobj, const char *new_name)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_renameasbuh1hhjubj=)}(h h]h }(hjPhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkobjh]hkobj}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(hconst char *new_nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnew_nameh]hnew_name}(hjȤhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhjѣhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjͣhhhjhMubah}(h]jȣah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjʣhhubj )}(hhh]j9)}(hChange the name of an object.h]hChange the name of an object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjʣhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj hNhNubjp)}(hXP**Parameters** ``struct kobject *kobj`` object in question. ``const char *new_name`` object's new name **Description** It is the responsibility of the caller to provide mutual exclusion between two different calls of kobject_rename on the same kobject and to ensure that new_name is valid and won't conflict with other kobjects.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh](j)}(h-``struct kobject *kobj`` object in question. h](j)}(h``struct kobject *kobj``h]j?)}(hj3h]hstruct kobject *kobj}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj-ubj)}(hhh]j9)}(hobject in question.h]hobject in question.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h+``const char *new_name`` object's new name h](j)}(h``const char *new_name``h]j?)}(hjlh]hconst char *new_name}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjfubj)}(hhh]j9)}(hobject's new nameh]hobject’s new name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(hIt is the responsibility of the caller to provide mutual exclusion between two different calls of kobject_rename on the same kobject and to ensure that new_name is valid and won't conflict with other kobjects.h]hIt is the responsibility of the caller to provide mutual exclusion between two different calls of kobject_rename on the same kobject and to ensure that new_name is valid and won’t conflict with other kobjects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_move (C function)c.kobject_movehNtauh1hhj hhhNhNubh)}(hhh](h)}(hCint kobject_move (struct kobject *kobj, struct kobject *new_parent)h]h)}(hBint kobject_move(struct kobject *kobj, struct kobject *new_parent)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h kobject_moveh]h)}(h kobject_moveh]h kobject_move}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h2(struct kobject *kobj, struct kobject *new_parent)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj%ubj=)}(h h]h }(hj6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubh)}(hhh]h)}(hkobjecth]hkobject}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_moveasbuh1hhj%ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!ubj&)}(hstruct kobject *new_parenth](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jcc.kobject_moveasbuh1hhjubj=)}(h h]h }(hjצhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h new_parenth]h new_parent}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj!ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jߥah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hMove object to another parent.h]hMove object to another parent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``struct kobject *kobj`` object in question. ``struct kobject *new_parent`` object's new parent (can be NULL)h](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj8ubj)}(hhh](j)}(h-``struct kobject *kobj`` object in question. h](j)}(h``struct kobject *kobj``h]j?)}(hj]h]hstruct kobject *kobj}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjWubj)}(hhh]j9)}(hobject in question.h]hobject in question.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h@``struct kobject *new_parent`` object's new parent (can be NULL)h](j)}(h``struct kobject *new_parent``h]j?)}(hjh]hstruct kobject *new_parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(h!object's new parent (can be NULL)h]h#object’s new parent (can be NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_del (C function) c.kobject_delhNtauh1hhj hhhNhNubh)}(hhh](h)}(h'void kobject_del (struct kobject *kobj)h]h)}(h&void kobject_del(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMeubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMeubh)}(h kobject_delh]h)}(h kobject_delh]h kobject_del}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMeubj )}(h(struct kobject *kobj)h]j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hj-hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj)ubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubh)}(hhh]h)}(hkobjecth]hkobject}(hjKhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jl)}j_jsb c.kobject_delasbuh1hhj)ubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj%ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMeubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMehjhhubj )}(hhh]j9)}(hUnlink kobject from hierarchy.h]hUnlink kobject from hierarchy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMehjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMeubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jȨj4jȨj5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``struct kobject *kobj`` object. **Description** This is the function that should be called to delete an object successfully added via kobject_add().h](j9)}(h**Parameters**h]jz)}(hjҨh]h Parameters}(hjԨhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjШubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMihj̨ubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMfhjubj)}(hhh]j9)}(hobject.h]hobject.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhj̨ubj9)}(h**Description**h]jz)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhhj̨ubj9)}(hdThis is the function that should be called to delete an object successfully added via kobject_add().h]hdThis is the function that should be called to delete an object successfully added via kobject_add().}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMghj̨ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_get (C function) c.kobject_gethNtauh1hhj hhhNhNubh)}(hhh](h)}(h3struct kobject * kobject_get (struct kobject *kobj)h]h)}(h1struct kobject *kobject_get(struct kobject *kobj)h](j+)}(hj.h]hstruct}(hjqhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmhhhj~hMyubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_ kobject_getsb c.kobject_getasbuh1hhjmhhhj~hMyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmhhhj~hMyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhj~hMyubh)}(h kobject_geth]h)}(hjh]h kobject_get}(hjЩhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj̩ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjmhhhj~hMyubj )}(h(struct kobject *kobj)h]j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]j c.kobject_getasbuh1hhjubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkobjh]hkobj}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjmhhhj~hMyubeh}(h]h ]h"]h$]h&]jj juh1hjjhjihhhj~hMyubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1hhj~hMyhjfhhubj )}(hhh]j9)}(hIncrement refcount for object.h]hIncrement refcount for object.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhjihhubah}(h]h ]h"]h$]h&]uh1jhjfhhhj~hMyubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(h2**Parameters** ``struct kobject *kobj`` object.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hjubj)}(hhh]j)}(h ``struct kobject *kobj`` object.h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(hobject.h]hobject.}(hjƪhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhjêubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjªhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_put (C function) c.kobject_puthNtauh1hhj hhhNhNubh)}(hhh](h)}(h'void kobject_put (struct kobject *kobj)h]h)}(h&void kobject_put(struct kobject *kobj)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h kobject_puth]h)}(h kobject_puth]h kobject_put}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct kobject *kobj)h]j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjDhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj@ubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubh)}(hhh]h)}(hkobjecth]hkobject}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjdmodnameN classnameNjcjf)}ji]jl)}j_j*sb c.kobject_putasbuh1hhj@ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj<ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hDecrement refcount for object.h]hDecrement refcount for object.}(hjǫhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjīhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j߫j4j߫j5j6j7uh1hhhhj hNhNubjp)}(h~**Parameters** ``struct kobject *kobj`` object. **Description** Decrement the refcount, and if 0, call kobject_cleanup().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(hobject.h]hobject.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(h9Decrement the refcount, and if 0, call kobject_cleanup().h]h9Decrement the refcount, and if 0, call kobject_cleanup().}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kobject_create_and_add (C function)c.kobject_create_and_addhNtauh1hhj hhhNhNubh)}(hhh](h)}(hRstruct kobject * kobject_create_and_add (const char *name, struct kobject *parent)h]h)}(hPstruct kobject *kobject_create_and_add(const char *name, struct kobject *parent)h](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_kobject_create_and_addsbc.kobject_create_and_addasbuh1hhjhhhjhM ubj=)}(h h]h }(hjȬhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM ubj)}(hjh]h*}(hj֬hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hkobject_create_and_addh]h)}(hjŬh]hkobject_create_and_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM ubj )}(h*(const char *name, struct kobject *parent)h](j&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj+hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnameh]hname}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct kobject *parenth](j+)}(hj.h]hstruct}(hj_hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj[ubj=)}(h h]h }(hjlhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubh)}(hhh]h)}(hkobjecth]hkobject}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jìc.kobject_create_and_addasbuh1hhj[ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1hhjhM hj}hhubj )}(hhh]j9)}(h?Create a struct kobject dynamically and register it with sysfs.h]h?Create a struct kobject dynamically and register it with sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjݭhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``const char *name`` the name for the kobject ``struct kobject *parent`` the parent kobject of this kobject, if any. **Description** This function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used. If the kobject was not able to be created, NULL will be returned.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh](j)}(h.``const char *name`` the name for the kobject h](j)}(h``const char *name``h]j?)}(hj!h]hconst char *name}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh]j9)}(hthe name for the kobjecth]hthe name for the kobject}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hM hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM hjubj)}(hG``struct kobject *parent`` the parent kobject of this kobject, if any. h](j)}(h``struct kobject *parent``h]j?)}(hjZh]hstruct kobject *parent}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjXubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjTubj)}(hhh]j9)}(h+the parent kobject of this kobject, if any.h]h+the parent kobject of this kobject, if any.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjohM hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj9)}(hThis function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used.h]hThis function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj9)}(hAIf the kobject was not able to be created, NULL will be returned.h]hAIf the kobject was not able to be created, NULL will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_register (C function)c.kset_registerhNtauh1hhj hhhNhNubh)}(hhh](h)}(h"int kset_register (struct kset *k)h]h)}(h!int kset_register(struct kset *k)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMSubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMSubh)}(h kset_registerh]h)}(h kset_registerh]h kset_register}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMSubj )}(h(struct kset *k)h]j&)}(hstruct kset *kh](j+)}(hj.h]hstruct}(hj&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj"ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubh)}(hhh]h)}(hkseth]hkset}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjFmodnameN classnameNjcjf)}ji]jl)}j_j sbc.kset_registerasbuh1hhj"ubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hj7h]hk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMSubah}(h]jܮah ](jjeh"]h$]h&]jj)jhuh1hhjhMShjޮhhubj )}(hhh]j9)}(hInitialize and add a kset.h]hInitialize and add a kset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMShjhhubah}(h]h ]h"]h$]h&]uh1jhjޮhhhjhMSubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``struct kset *k`` kset. **NOTE** On error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.h](j9)}(h**Parameters**h]jz)}(hjʯh]h Parameters}(hj̯hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjȯubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMWhjįubj)}(hhh]j)}(h``struct kset *k`` kset. h](j)}(h``struct kset *k``h]j?)}(hjh]hstruct kset *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMThjubj)}(hhh]j9)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjįubj9)}(h**NOTE**h]jz)}(hj$h]hNOTE}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhjįubj9)}(hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.h]hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhjįubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_unregister (C function)c.kset_unregisterhNtauh1hhj hhhNhNubh)}(hhh](h)}(h%void kset_unregister (struct kset *k)h]h)}(h$void kset_unregister(struct kset *k)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMsubj=)}(h h]h }(hjxhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjehhhjwhMsubh)}(hkset_unregisterh]h)}(hkset_unregisterh]hkset_unregister}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjehhhjwhMsubj )}(h(struct kset *k)h]j&)}(hstruct kset *kh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkseth]hkset}(hjİhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjưmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kset_unregisterasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hj7h]hk}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjehhhjwhMsubeh}(h]h ]h"]h$]h&]jj juh1hjjhjahhhjwhMsubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1hhjwhMshj^hhubj )}(hhh]j9)}(hRemove a kset.h]hRemove a kset.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMshj%hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhMsubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j@j4j@j5j6j7uh1hhhhj hNhNubjp)}(h***Parameters** ``struct kset *k`` kset.h](j9)}(h**Parameters**h]jz)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMwhjDubj)}(hhh]j)}(h``struct kset *k`` kset.h](j)}(h``struct kset *k``h]j?)}(hjih]hstruct kset *k}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhjcubj)}(hhh]j9)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMthjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMyhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkset_find_obj (C function)c.kset_find_objhNtauh1hhj hhhNhNubh)}(hhh](h)}(hDstruct kobject * kset_find_obj (struct kset *kset, const char *name)h]h)}(hBstruct kobject *kset_find_obj(struct kset *kset, const char *name)h](j+)}(hj.h]hstruct}(hjñhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjѱhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjбhMubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj߱ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_ kset_find_objsbc.kset_find_objasbuh1hhjhhhjбhMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjбhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjбhMubh)}(h kset_find_objh]h)}(hjh]h kset_find_obj}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjбhMubj )}(h%(struct kset *kset, const char *name)h](j&)}(hstruct kset *kseth](j+)}(hj.h]hstruct}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj9ubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubh)}(hhh]h)}(hkseth]hkset}(hj[hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj]modnameN classnameNjcjf)}ji]jc.kset_find_objasbuh1hhj9ubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj9ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubj&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjȲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjֲhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj5ubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjбhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjбhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjбhMhjhhubj )}(hhh]j9)}(hSearch for object in kset.h]hSearch for object in kset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjбhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j3j4j3j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct kset *kset`` kset we're looking in. ``const char *name`` object's name. **Description** Lock kset via **kset->subsys**, and iterate over **kset->list**, looking for a matching kobject. If matching object is found take a reference and return the object.h](j9)}(h**Parameters**h]jz)}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj7ubj)}(hhh](j)}(h-``struct kset *kset`` kset we're looking in. h](j)}(h``struct kset *kset``h]j?)}(hj\h]hstruct kset *kset}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjZubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjVubj)}(hhh]j9)}(hkset we're looking in.h]hkset we’re looking in.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubj)}(h$``const char *name`` object's name. h](j)}(h``const char *name``h]j?)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(hobject's name.h]hobject’s name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubj9)}(h**Description**h]jz)}(hjгh]h Description}(hjҳhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjγubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj7ubj9)}(hLock kset via **kset->subsys**, and iterate over **kset->list**, looking for a matching kobject. If matching object is found take a reference and return the object.h](hLock kset via }(hjhhhNhNubjz)}(h**kset->subsys**h]h kset->subsys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, and iterate over }(hjhhhNhNubjz)}(h**kset->list**h]h kset->list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhe, looking for a matching kobject. If matching object is found take a reference and return the object.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ kset_create_and_add (C function)c.kset_create_and_addhNtauh1hhj hhhNhNubh)}(hhh](h)}(h{struct kset * kset_create_and_add (const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h]h)}(hystruct kset *kset_create_and_add(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j+)}(hj.h]hstruct}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj5hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhjFhMubh)}(hhh]h)}(hkseth]hkset}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjZmodnameN classnameNjcjf)}ji]jl)}j_kset_create_and_addsbc.kset_create_and_addasbuh1hhj5hhhjFhMubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhjFhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjFhMubh)}(hkset_create_and_addh]h)}(hjvh]hkset_create_and_add}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhjFhMubj )}(hY(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjδhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjܴhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h(const struct kset_uevent_ops *uevent_opsh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj+)}(hj.h]hstruct}(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(hkset_uevent_opsh]hkset_uevent_ops}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jtc.kset_create_and_addasbuh1hhj ubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(h uevent_opsh]h uevent_ops}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hstruct kobject *parent_kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jtc.kset_create_and_addasbuh1hhjubj=)}(h h]h }(hj׵hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h parent_kobjh]h parent_kobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhjFhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1hhhjFhMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhjFhMhj.hhubj )}(hhh]j9)}(h5Create a struct kset dynamically and add it to sysfs.h]h5Create a struct kset dynamically and add it to sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjFhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j4j4j4j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``const char *name`` the name for the kset ``const struct kset_uevent_ops *uevent_ops`` a struct kset_uevent_ops for the kset ``struct kobject *parent_kobj`` the parent kobject of this kset, if any. **Description** This function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used. If the kset was not able to be created, NULL will be returned.h](j9)}(h**Parameters**h]jz)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj8ubj)}(hhh](j)}(h+``const char *name`` the name for the kset h](j)}(h``const char *name``h]j?)}(hj]h]hconst char *name}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjWubj)}(hhh]j9)}(hthe name for the kseth]hthe name for the kset}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(hS``const struct kset_uevent_ops *uevent_ops`` a struct kset_uevent_ops for the kset h](j)}(h,``const struct kset_uevent_ops *uevent_ops``h]j?)}(hjh]h(const struct kset_uevent_ops *uevent_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]j9)}(h%a struct kset_uevent_ops for the kseth]h%a struct kset_uevent_ops for the kset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(hI``struct kobject *parent_kobj`` the parent kobject of this kset, if any. h](j)}(h``struct kobject *parent_kobj``h]j?)}(hj϶h]hstruct kobject *parent_kobj}(hjѶhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjͶubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjɶubj)}(hhh]j9)}(h(the parent kobject of this kset, if any.h]h(the parent kobject of this kset, if any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɶubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj8ubj9)}(hThis function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used.h]hThis function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj8ubj9)}(h>If the kset was not able to be created, NULL will be returned.h]h>If the kset was not able to be created, NULL will be returned.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_uevent_env (C function)c.kobject_uevent_envhNtauh1hhj hhhNhNubh)}(hhh](h)}(h[int kobject_uevent_env (struct kobject *kobj, enum kobject_action action, char *envp_ext[])h]h)}(hZint kobject_uevent_env(struct kobject *kobj, enum kobject_action action, char *envp_ext[])h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubj=)}(h h]h }(hjmhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZhhhjlhMubh)}(hkobject_uevent_envh]h)}(hkobject_uevent_envh]hkobject_uevent_env}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjZhhhjlhMubj )}(hD(struct kobject *kobj, enum kobject_action action, char *envp_ext[])h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kobject_uevent_envasbuh1hhjubj=)}(h h]h }(hjٷhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(henum kobject_action actionh](j+)}(hjh]henum}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(hkobject_actionh]hkobject_action}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-modnameN classnameNjcjf)}ji]jշc.kobject_uevent_envasbuh1hhj ubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hactionh]haction}(hjWhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hchar *envp_ext[]h](j)}(hcharh]hchar}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj=)}(h h]h }(hj~hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(henvp_exth]henvp_ext}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubj)}(hjϧh]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjݧh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1hhjlhMhjShhubj )}(hhh]j9)}(h&send an uevent with environmental datah]h&send an uevent with environmental data}(hjݸhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjڸhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hXB**Parameters** ``struct kobject *kobj`` struct kobject that the action is happening to ``enum kobject_action action`` action that is happening ``char *envp_ext[]`` pointer to environmental data **Description** Returns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]j?)}(hjh]hstruct kobject *kobj}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]j9)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]j?)}(hjWh]henum kobject_action action}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjUubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjQubj)}(hhh]j9)}(haction that is happeningh]haction that is happening}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h3``char *envp_ext[]`` pointer to environmental data h](j)}(h``char *envp_ext[]``h]j?)}(hjh]hchar *envp_ext[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]j9)}(hpointer to environmental datah]hpointer to environmental data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj˹h]h Description}(hj͹hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjɹubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj9)}(heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h]heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkobject_uevent (C function)c.kobject_ueventhNtauh1hhj hhhNhNubh)}(hhh](h)}(hEint kobject_uevent (struct kobject *kobj, enum kobject_action action)h]h)}(hDint kobject_uevent(struct kobject *kobj, enum kobject_action action)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhjhMubh)}(hkobject_ueventh]h)}(hkobject_ueventh]hkobject_uevent}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhjhMubj )}(h2(struct kobject *kobj, enum kobject_action action)h](j&)}(hstruct kobject *kobjh](j+)}(hj.h]hstruct}(hjMhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjIubj=)}(h h]h }(hjZhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubh)}(hhh]h)}(hkobjecth]hkobject}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmmodnameN classnameNjcjf)}ji]jl)}j_j3sbc.kobject_ueventasbuh1hhjIubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubj&)}(henum kobject_action actionh](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj̺hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkobject_actionh]hkobject_action}(hjݺhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjںubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjߺmodnameN classnameNjcjf)}ji]jc.kobject_ueventasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hactionh]haction}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjEubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h%notify userspace by sending an ueventh]h%notify userspace by sending an uevent}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jKj4jKj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct kobject *kobj`` struct kobject that the action is happening to ``enum kobject_action action`` action that is happening **Description** Returns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.h](j9)}(h**Parameters**h]jz)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjOubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]j?)}(hjth]hstruct kobject *kobj}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjnubj)}(hhh]j9)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]j?)}(hjh]henum kobject_action action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]j9)}(haction that is happeningh]haction that is happening}(hjƻhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj»hMhjûubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj»hMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjOubj9)}(haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.h]haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_uevent_var (C function)c.add_uevent_varhNtauh1hhj hhhNhNubh)}(hhh](h)}(hIint add_uevent_var (struct kobj_uevent_env *env, const char *format, ...)h]h)}(hHint add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubj=)}(h h]h }(hj<hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)hhhj;hMubh)}(hadd_uevent_varh]h)}(hadd_uevent_varh]hadd_uevent_var}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ](jjeh"]h$]h&]jj uh1hhj)hhhj;hMubj )}(h6(struct kobj_uevent_env *env, const char *format, ...)h](j&)}(hstruct kobj_uevent_env *envh](j+)}(hj.h]hstruct}(hjjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjfubj=)}(h h]h }(hjwhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubh)}(hhh]h)}(hkobj_uevent_envh]hkobj_uevent_env}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jPsbc.add_uevent_varasbuh1hhjfubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(henvh]henv}(hjühhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubj&)}(hconst char *formath](j+)}(hj<*h]hconst}(hjܼhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjؼubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjؼubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؼubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjؼubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؼubh)}(hformath]hformat}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjؼubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubj&)}(h...h]j)}(hjh]h...}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjbubeh}(h]h ]h"]h$]h&]jj uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj;hMhj"hhubj )}(hhh]j9)}(h.add key value string to the environment bufferh]h.add key value string to the environment buffer}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jzj4jzj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct kobj_uevent_env *env`` environment buffer structure ``const char *format`` printf format for the key=value pair ``...`` variable arguments **Description** Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj~ubj)}(hhh](j)}(h=``struct kobj_uevent_env *env`` environment buffer structure h](j)}(h``struct kobj_uevent_env *env``h]j?)}(hjh]hstruct kobj_uevent_env *env}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]j9)}(henvironment buffer structureh]henvironment buffer structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``const char *format`` printf format for the key=value pair h](j)}(h``const char *format``h]j?)}(hjܽh]hconst char *format}(hj޽hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjڽubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjֽubj)}(hhh]j9)}(h$printf format for the key=value pairh]h$printf format for the key=value pair}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjֽubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j?)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhjubj)}(hhh]j9)}(hvariable argumentsh]hvariable arguments}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhj~ubj9)}(h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.h]h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubeh}(h]kernel-objects-manipulationah ]h"]kernel objects manipulationah$]h&]uh1hhhhhhhhKjubh)}(hhh](h)}(hKernel utility functionsh]hKernel utility functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKsubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌARRAY_SIZE (C macro) c.ARRAY_SIZEhNtauh1hhjhhhNhNubh)}(hhh](h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]h)}(h ARRAY_SIZEh]h)}(hjh]h ARRAY_SIZE}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjžhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjžhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjžhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j޾j4j޾j5j6j7uh1hhhhjhNhNubj9)}(h``ARRAY_SIZE (arr)``h]j?)}(hjh]hARRAY_SIZE (arr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hjhhubjU)}(h,get the number of elements in array **arr** h]j9)}(h+get the number of elements in array **arr**h](h$get the number of elements in array }(hjhhhNhNubjz)}(h**arr**h]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(h+**Parameters** ``arr`` array to be sizedh](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hj!ubj)}(hhh]j)}(h``arr`` array to be sizedh](j)}(h``arr``h]j?)}(hjFh]harr}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjDubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhj@ubj)}(hhh]j9)}(harray to be sizedh]harray to be sized}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌARRAY_END (C macro) c.ARRAY_ENDhNtauh1hhjhhhNhNubh)}(hhh](h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]h)}(h ARRAY_ENDh]h)}(hjh]h ARRAY_END}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jпj4jпj5j6j7uh1hhhhjhNhNubj9)}(h``ARRAY_END (arr)``h]j?)}(hjֿh]hARRAY_END (arr)}(hjؿhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjԿubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjhhubjU)}(hhj6ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhj2ubj)}(hhh]j9)}(harrayh]harray}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcontainer_of (C macro)c.container_ofhNtauh1hhjhhhNhNubh)}(hhh](h)}(h container_ofh]h)}(h container_ofh]h)}(h container_ofh]h)}(hjh]h container_of}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h$``container_of (ptr, type, member)``h]j?)}(hjh]h container_of (ptr, type, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK hjhhubjU)}(h=cast a member of a structure out to the containing structure h]j9)}(hhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK hjubj)}(hhh]j9)}(hthe pointer to the member.h]hthe pointer to the member.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hK hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hK hjubj)}(h?``type`` the type of the container struct this is embedded in. h](j)}(h``type``h]j?)}(hjUh]htype}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK hjOubj)}(hhh]j9)}(h5the type of the container struct this is embedded in.h]h5the type of the container struct this is embedded in.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjjhK hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhK hjubj)}(h5``member`` the name of the member within the struct. h](j)}(h ``member``h]j?)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh]j9)}(h)the name of the member within the struct.h]h)the name of the member within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj9)}(hWWARNING: any const qualifier of **ptr** is lost. Do not use container_of() in new code.h](h WARNING: any const qualifier of }(hjhhhNhNubjz)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh0 is lost. Do not use container_of() in new code.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcontainer_of_const (C macro)c.container_of_consthNtauh1hhjhhhNhNubh)}(hhh](h)}(hcontainer_of_consth]h)}(hcontainer_of_consth]h)}(hcontainer_of_consth]h)}(hjh]hcontainer_of_const}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj7hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj7hKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj7hKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jPj4jPj5j6j7uh1hhhhjhNhNubj9)}(h*``container_of_const (ptr, type, member)``h]j?)}(hjVh]h&container_of_const (ptr, type, member)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjhhubjU)}(hhcast a member of a structure out to the containing structure and preserve the const-ness of the pointer h]j9)}(hgcast a member of a structure out to the containing structure and preserve the const-ness of the pointerh]hgcast a member of a structure out to the containing structure and preserve the const-ness of the pointer}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjlubah}(h]h ]h"]h$]h&]uh1jThj~hKhjhhubjp)}(hX **Parameters** ``ptr`` the pointer to the member ``type`` the type of the container struct this is embedded in. ``member`` the name of the member within the struct. **Description** Always prefer container_of_const() instead of container_of() in new code.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh](j)}(h"``ptr`` the pointer to the member h](j)}(h``ptr``h]j?)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh]j9)}(hthe pointer to the memberh]hthe pointer to the member}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h?``type`` the type of the container struct this is embedded in. h](j)}(h``type``h]j?)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh]j9)}(h5the type of the container struct this is embedded in.h]h5the type of the container struct this is embedded in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h5``member`` the name of the member within the struct. h](j)}(h ``member``h]j?)}(hjh]hmember}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh]j9)}(h)the name of the member within the struct.h]h)the name of the member within the struct.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK!hjubj9)}(hIAlways prefer container_of_const() instead of container_of() in new code.h]hIAlways prefer container_of_const() instead of container_of() in new code.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌsizeof_field (C macro)c.sizeof_fieldhNtauh1hhjhhhNhNubh)}(hhh](h)}(h sizeof_fieldh]h)}(h sizeof_fieldh]h)}(h sizeof_fieldh]h)}(hjh]h sizeof_field}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``sizeof_field (TYPE, MEMBER)``h]j?)}(hjh]hsizeof_field (TYPE, MEMBER)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjhhubjU)}(h+Report the size of a struct field in bytes h]j9)}(h*Report the size of a struct field in bytesh]h*Report the size of a struct field in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(hw**Parameters** ``TYPE`` The structure containing the field of interest ``MEMBER`` The field to return the size ofh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh](j)}(h8``TYPE`` The structure containing the field of interest h](j)}(h``TYPE``h]j?)}(hj&h]hTYPE}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhj ubj)}(hhh]j9)}(h.The structure containing the field of interesth]h.The structure containing the field of interest}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjubj)}(h*``MEMBER`` The field to return the size ofh](j)}(h ``MEMBER``h]j?)}(hj_h]hMEMBER}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjYubj)}(hhh]j9)}(hThe field to return the size ofh]hThe field to return the size of}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌoffsetofend (C macro) c.offsetofendhNtauh1hhjhhhNhNubh)}(hhh](h)}(h offsetofendh]h)}(h offsetofendh]h)}(h offsetofendh]h)}(hjh]h offsetofend}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``offsetofend (TYPE, MEMBER)``h]j?)}(hjh]hoffsetofend (TYPE, MEMBER)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjhhubjU)}(h6Report the offset of a struct field within the struct h]j9)}(h5Report the offset of a struct field within the structh]h5Report the offset of a struct field within the struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(h{**Parameters** ``TYPE`` The type of the structure ``MEMBER`` The member within the structure to get the end offset ofh](j9)}(h**Parameters**h]jz)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh](j)}(h#``TYPE`` The type of the structure h](j)}(h``TYPE``h]j?)}(hjCh]hTYPE}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjAubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhj=ubj)}(hhh]j9)}(hThe type of the structureh]hThe type of the structure}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjXhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhj:ubj)}(hC``MEMBER`` The member within the structure to get the end offset ofh](j)}(h ``MEMBER``h]j?)}(hj|h]hMEMBER}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjzubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjvubj)}(hhh]j9)}(h8The member within the structure to get the end offset ofh]h8The member within the structure to get the end offset of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌstruct_group (C macro)c.struct_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(h struct_grouph]h)}(h struct_grouph]h)}(h struct_grouph]h)}(hjh]h struct_group}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK$ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK$hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK$ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h#``struct_group (NAME, MEMBERS...)``h]j?)}(hj h]hstruct_group (NAME, MEMBERS...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK&hjhhubjU)}(h0Wrap a set of declarations in a mirrored struct h]j9)}(h/Wrap a set of declarations in a mirrored structh]h/Wrap a set of declarations in a mirrored struct}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK$hj"ubah}(h]h ]h"]h$]h&]uh1jThj4hK$hjhhubjp)}(hX**Parameters** ``NAME`` The identifier name of the mirrored sub-struct ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.h](j9)}(h**Parameters**h]jz)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK(hj;ubj)}(hhh](j)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]j?)}(hj`h]hNAME}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj^ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK&hjZubj)}(hhh]j9)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjuhK&hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhK&hjWubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]j?)}(hjh]h MEMBERS...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK'hjubj)}(hhh]j9)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK)hj;ubj9)}(hX Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.h]hX Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK(hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌstruct_group_attr (C macro)c.struct_group_attrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct_group_attrh]h)}(hstruct_group_attrh]h)}(hstruct_group_attrh]h)}(hjh]hstruct_group_attr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK3ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj0hK3ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj0hK3hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj0hK3ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jIj4jIj5j6j7uh1hhhhjhNhNubj9)}(h/``struct_group_attr (NAME, ATTRS, MEMBERS...)``h]j?)}(hjOh]h+struct_group_attr (NAME, ATTRS, MEMBERS...)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK5hjhhubjU)}(h1Create a struct_group() with trailing attributes h]j9)}(h0Create a struct_group() with trailing attributesh]h0Create a struct_group() with trailing attributes}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK3hjeubah}(h]h ]h"]h$]h&]uh1jThjwhK3hjhhubjp)}(hX**Parameters** ``NAME`` The identifier name of the mirrored sub-struct ``ATTRS`` Any struct attributes to apply ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK7hj~ubj)}(hhh](j)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]j?)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK5hjubj)}(hhh]j9)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK5hjubj)}(h)``ATTRS`` Any struct attributes to apply h](j)}(h ``ATTRS``h]j?)}(hjh]hATTRS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK6hjubj)}(hhh]j9)}(hAny struct attributes to applyh]hAny struct attributes to apply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]j?)}(hjh]h MEMBERS...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK7hjubj)}(hhh]j9)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj*hK7hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hK7hjubeh}(h]h ]h"]h$]h&]uh1jhj~ubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK9hj~ubj9)}(hX4Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.h]hX4Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK8hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌstruct_group_tagged (C macro)c.struct_group_taggedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct_group_taggedh]h)}(hstruct_group_taggedh]h)}(hstruct_group_taggedh]h)}(hjh]hstruct_group_tagged}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKCubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKCubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKChjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKCubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h/``struct_group_tagged (TAG, NAME, MEMBERS...)``h]j?)}(hjh]h+struct_group_tagged (TAG, NAME, MEMBERS...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKEhjhhubjU)}(h*Create a struct_group with a reusable tag h]j9)}(h)Create a struct_group with a reusable tagh]h)Create a struct_group with a reusable tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKChjubah}(h]h ]h"]h$]h&]uh1jThjhKChjhhubjp)}(hX:**Parameters** ``TAG`` The tag name for the named sub-struct ``NAME`` The identifier name of the mirrored sub-struct ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKGhjubj)}(hhh](j)}(h.``TAG`` The tag name for the named sub-struct h](j)}(h``TAG``h]j?)}(hjh]hTAG}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKEhjubj)}(hhh]j9)}(h%The tag name for the named sub-structh]h%The tag name for the named sub-struct}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hKEhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKEhjubj)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]j?)}(hjXh]hNAME}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKFhjRubj)}(hhh]j9)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjmhKFhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKFhjubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]j?)}(hjh]h MEMBERS...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKGhjubj)}(hhh]j9)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKGhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKIhjubj9)}(hXjUsed to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.h]hXjUsed to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌDECLARE_FLEX_ARRAY (C macro)c.DECLARE_FLEX_ARRAYhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDECLARE_FLEX_ARRAYh]h)}(hDECLARE_FLEX_ARRAYh]h)}(hDECLARE_FLEX_ARRAYh]h)}(hj h]hDECLARE_FLEX_ARRAY}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKTubah}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj(hKTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj(hKThjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj(hKTubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhjhNhNubj9)}(h#``DECLARE_FLEX_ARRAY (TYPE, NAME)``h]j?)}(hjGh]hDECLARE_FLEX_ARRAY (TYPE, NAME)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKVhjhhubjU)}(h+Declare a flexible array usable in a union h]j9)}(h*Declare a flexible array usable in a unionh]h*Declare a flexible array usable in a union}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKThj]ubah}(h]h ]h"]h$]h&]uh1jThjohKThjhhubjp)}(hX:**Parameters** ``TYPE`` The type of each flexible array element ``NAME`` The name of the flexible array member **Description** In order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.h](j9)}(h**Parameters**h]jz)}(hj|h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKXhjvubj)}(hhh](j)}(h1``TYPE`` The type of each flexible array element h](j)}(h``TYPE``h]j?)}(hjh]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKVhjubj)}(hhh]j9)}(h'The type of each flexible array elementh]h'The type of each flexible array element}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjubj)}(h/``NAME`` The name of the flexible array member h](j)}(h``NAME``h]j?)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKWhjubj)}(hhh]j9)}(h%The name of the flexible array memberh]h%The name of the flexible array member}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhjubeh}(h]h ]h"]h$]h&]uh1jhjvubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKYhjvubj9)}(hIn order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.h]hIn order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKXhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__TRAILING_OVERLAP (C macro)c.__TRAILING_OVERLAPhNtauh1hhjhhhNhNubh)}(hhh](h)}(h__TRAILING_OVERLAPh]h)}(h__TRAILING_OVERLAPh]h)}(h__TRAILING_OVERLAPh]h)}(hjNh]h__TRAILING_OVERLAP}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhjPhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKaubah}(h]h ]h"]h$]h&]jj juh1hjjhjLhhhjkhKaubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1hhjkhKahjIhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjIhhhjkhKaubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h8``__TRAILING_OVERLAP (TYPE, NAME, FAM, ATTRS, MEMBERS)``h]j?)}(hjh]h4__TRAILING_OVERLAP (TYPE, NAME, FAM, ATTRS, MEMBERS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKchjhhubjU)}(h7Overlap a flexible-array member with trailing members. h]j9)}(h6Overlap a flexible-array member with trailing members.h]h6Overlap a flexible-array member with trailing members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKahjubah}(h]h ]h"]h$]h&]uh1jThjhKahjhhubjp)}(hX**Parameters** ``TYPE`` Flexible structure type name, including "struct" keyword. ``NAME`` Name for a variable to define. ``FAM`` The flexible-array member within **TYPE** ``ATTRS`` Any struct attributes (usually empty) ``MEMBERS`` Trailing overlapping members. **Description** Creates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKehjubj)}(hhh](j)}(hC``TYPE`` Flexible structure type name, including "struct" keyword. h](j)}(h``TYPE``h]j?)}(hjh]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKghjubj)}(hhh]j9)}(h9Flexible structure type name, including "struct" keyword.h]h=Flexible structure type name, including “struct” keyword.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghjubj)}(h(``NAME`` Name for a variable to define. h](j)}(h``NAME``h]j?)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhhjubj)}(hhh]j9)}(hName for a variable to define.h]hName for a variable to define.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hKhhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKhhjubj)}(h2``FAM`` The flexible-array member within **TYPE** h](j)}(h``FAM``h]j?)}(hjPh]hFAM}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKihjJubj)}(hhh]j9)}(h)The flexible-array member within **TYPE**h](h!The flexible-array member within }(hjihhhNhNubjz)}(h**TYPE**h]hTYPE}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubeh}(h]h ]h"]h$]h&]uh1j8hjehKihjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKihjubj)}(h0``ATTRS`` Any struct attributes (usually empty) h](j)}(h ``ATTRS``h]j?)}(hjh]hATTRS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKjhjubj)}(hhh]j9)}(h%Any struct attributes (usually empty)h]h%Any struct attributes (usually empty)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKjhjubj)}(h*``MEMBERS`` Trailing overlapping members. h](j)}(h ``MEMBERS``h]j?)}(hjh]hMEMBERS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKkhjubj)}(hhh]j9)}(hTrailing overlapping members.h]hTrailing overlapping members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKkhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKmhjubj9)}(hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h]hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌTRAILING_OVERLAP (C macro)c.TRAILING_OVERLAPhNtauh1hhjhhhNhNubh)}(hhh](h)}(hTRAILING_OVERLAPh]h)}(hTRAILING_OVERLAPh]h)}(hTRAILING_OVERLAPh]h)}(hjJh]hTRAILING_OVERLAP}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPubah}(h]h ](jjeh"]h$]h&]jj uh1hhjLhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKwubah}(h]h ]h"]h$]h&]jj juh1hjjhjHhhhjghKwubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhjghKwhjEhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjEhhhjghKwubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h/``TRAILING_OVERLAP (TYPE, NAME, FAM, MEMBERS)``h]j?)}(hjh]h+TRAILING_OVERLAP (TYPE, NAME, FAM, MEMBERS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKyhjhhubjU)}(h7Overlap a flexible-array member with trailing members. h]j9)}(h6Overlap a flexible-array member with trailing members.h]h6Overlap a flexible-array member with trailing members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKwhjubah}(h]h ]h"]h$]h&]uh1jThjhKwhjhhubjp)}(hXu**Parameters** ``TYPE`` Flexible structure type name, including "struct" keyword. ``NAME`` Name for a variable to define. ``FAM`` The flexible-array member within **TYPE** ``MEMBERS`` Trailing overlapping members. **Description** Creates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK{hjubj)}(hhh](j)}(hC``TYPE`` Flexible structure type name, including "struct" keyword. h](j)}(h``TYPE``h]j?)}(hjh]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK|hjubj)}(hhh]j9)}(h9Flexible structure type name, including "struct" keyword.h]h=Flexible structure type name, including “struct” keyword.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjubj)}(h(``NAME`` Name for a variable to define. h](j)}(h``NAME``h]j?)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK}hj ubj)}(hhh]j9)}(hName for a variable to define.h]hName for a variable to define.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hK}hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hK}hjubj)}(h2``FAM`` The flexible-array member within **TYPE** h](j)}(h``FAM``h]j?)}(hjLh]hFAM}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjJubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK~hjFubj)}(hhh]j9)}(h)The flexible-array member within **TYPE**h](h!The flexible-array member within }(hjehhhNhNubjz)}(h**TYPE**h]hTYPE}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubeh}(h]h ]h"]h$]h&]uh1j8hjahK~hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahK~hjubj)}(h*``MEMBERS`` Trailing overlapping members. h](j)}(h ``MEMBERS``h]j?)}(hjh]hMEMBERS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh]j9)}(hTrailing overlapping members.h]hTrailing overlapping members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj9)}(hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h]hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfor_each_if (C macro) c.for_each_ifhNtauh1hhjhhhNhNubh)}(hhh](h)}(h for_each_ifh]h)}(h for_each_ifh]h)}(h for_each_ifh]h)}(hj h]h for_each_if}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK ubah}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj*hK ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj*hK hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj*hK ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jCj4jCj5j6j7uh1hhhhjhNhNubj9)}(h``for_each_if (condition)``h]j?)}(hjIh]hfor_each_if (condition)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjhhubjU)}(hlist, head) \' for_each_if(x->something == SOMETHING) The for_each_if() macro makes the use of for_each_foo_bar() less error prone.h](j9)}(h**Parameters**h]jz)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjxubj)}(hhh]j)}(h%``condition`` The condition to check h](j)}(h ``condition``h]j?)}(hjh]h condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjubj)}(hhh]j9)}(hThe condition to checkh]hThe condition to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjxubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjxubj9)}(h Typical use::h]h Typical use:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjxubj)}(h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)h]h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)}hjsbah}(h]h ]h"]h$]h&]jj uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjxubj9)}(hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.h]hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌfind_closest (C macro)c.find_closesthNtauh1hhjhhhNhNubh)}(hhh](h)}(h find_closesth]h)}(h find_closesth]h)}(h find_closesth]h)}(hj5h]h find_closest}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjRhKubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjRhKhj0hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0hhhjRhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhjhNhNubj9)}(h``find_closest (x, a, as)``h]j?)}(hjqh]hfind_closest (x, a, as)}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjhhubjU)}(h-locate the closest element in a sorted array h]j9)}(h,locate the closest element in a sorted arrayh]h,locate the closest element in a sorted array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(hX{**Parameters** ``x`` The reference value. ``a`` The array in which to look for the closest element. Must be sorted in ascending order. ``as`` Size of 'a'. **Description** Returns the index of the element closest to 'x'. **Note** If using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh](j)}(h``x`` The reference value. h](j)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j9)}(hThe reference value.h]hThe reference value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h]``a`` The array in which to look for the closest element. Must be sorted in ascending order. h](j)}(h``a``h]j?)}(hjh]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j9)}(hVThe array in which to look for the closest element. Must be sorted in ascending order.h]hVThe array in which to look for the closest element. Must be sorted in ascending order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``as`` Size of 'a'. h](j)}(h``as``h]j?)}(hj8h]has}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj2ubj)}(hhh]j9)}(h Size of 'a'.h]hSize of ‘a’.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjMhKhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjubj9)}(h0Returns the index of the element closest to 'x'.h]h4Returns the index of the element closest to ‘x’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj9)}(h**Note**h]jz)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hjubj)}(hhh]j)}(hIf using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](j)}(hBIf using an array of negative numbers (or mixed positive numbers),h]hBIf using an array of negative numbers (or mixed positive numbers),}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hjubj)}(hhh]j9)}(h>then be sure that 'x' is of a signed-type to get good results.h]hBthen be sure that ‘x’ is of a signed-type to get good results.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!find_closest_descending (C macro)c.find_closest_descendinghNtauh1hhjhhhNhNubh)}(hhh](h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]h)}(hfind_closest_descendingh]h)}(hjh]hfind_closest_descending}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK8ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj!hK8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj!hK8hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj!hK8ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j:j4j:j5j6j7uh1hhhhjhNhNubj9)}(h&``find_closest_descending (x, a, as)``h]j?)}(hj@h]h"find_closest_descending (x, a, as)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK:hjhhubjU)}(h-locate the closest element in a sorted array h]j9)}(h,locate the closest element in a sorted arrayh]h,locate the closest element in a sorted array}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK8hjVubah}(h]h ]h"]h$]h&]uh1jThjhhK8hjhhubjp)}(hX**Parameters** ``x`` The reference value. ``a`` The array in which to look for the closest element. Must be sorted in descending order. ``as`` Size of 'a'. **Description** Similar to find_closest() but 'a' is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of '__fc_right' & '__fc_left' also works for unsigned numbers.h](j9)}(h**Parameters**h]jz)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK9hjubj)}(hhh]j9)}(hThe reference value.h]hThe reference value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubj)}(h^``a`` The array in which to look for the closest element. Must be sorted in descending order. h](j)}(h``a``h]j?)}(hjh]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK;hjubj)}(hhh]j9)}(hWThe array in which to look for the closest element. Must be sorted in descending order.h]hWThe array in which to look for the closest element. Must be sorted in descending order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubj)}(h``as`` Size of 'a'. h](j)}(h``as``h]j?)}(hjh]has}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjoubj9)}(hSimilar to find_closest() but 'a' is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of '__fc_right' & '__fc_left' also works for unsigned numbers.h]hSimilar to find_closest() but ‘a’ is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of ‘__fc_right’ & ‘__fc_left’ also works for unsigned numbers.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK=hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌPTR_IF (C macro)c.PTR_IFhNtauh1hhjhhhNhNubh)}(hhh](h)}(hPTR_IFh]h)}(hPTR_IFh]h)}(hPTR_IFh]h)}(hjh]hPTR_IF}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKVubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1hhjhKVhj|hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj|hhhjhKVubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``PTR_IF (cond, ptr)``h]j?)}(hjh]hPTR_IF (cond, ptr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKXhjhhubjU)}(h?evaluate to **ptr** if **cond** is true, or to NULL otherwise. h]j9)}(h>evaluate to **ptr** if **cond** is true, or to NULL otherwise.h](h evaluate to }(hjhhhNhNubjz)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubjz)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is true, or to NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVhjubah}(h]h ]h"]h$]h&]uh1jThj hKVhjhhubjp)}(hX]**Parameters** ``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) ``ptr`` A pointer to assign if **cond** is true. **Description** PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer. The macro can be very useful to help compiler dropping dead code. For instance, consider the following:: #ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif }; While this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set. An alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected. With the macro it is possible to write the following:: static int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), }; The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubj)}(hhh](j)}(hD``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) h](j)}(h``cond``h]j?)}(hj5h]hcond}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKWhj/ubj)}(hhh]j9)}(h:A conditional, usually in a form of IS_ENABLED(CONFIG_FOO)h]h:A conditional, usually in a form of IS_ENABLED(CONFIG_FOO)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhKWhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKWhj,ubj)}(h1``ptr`` A pointer to assign if **cond** is true. h](j)}(h``ptr``h]j?)}(hjnh]hptr}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKXhjhubj)}(hhh]j9)}(h(A pointer to assign if **cond** is true.h](hA pointer to assign if }(hjhhhNhNubjz)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKXhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubj9)}(hPTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer.h](h1PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to }(hjhhhNhNubjz)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhG if CONFIG_FOO is set to ‘y’ or ‘m’, or to NULL otherwise. The }(hjhhhNhNubjz)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh argument must be a pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKYhjubj9)}(hAThe macro can be very useful to help compiler dropping dead code.h]hAThe macro can be very useful to help compiler dropping dead code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK\hjubj9)}(h&For instance, consider the following::h]h%For instance, consider the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK^hjubj)}(h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };h]h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };}hj"sbah}(h]h ]h"]h$]h&]jj uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK`hjubj9)}(hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set.h]hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn’t have a way to know unless the configuration option is set.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKmhjubj9)}(hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.h]hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKrhjubj9)}(h6With the macro it is possible to write the following::h]h5With the macro it is possible to write the following:}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKyhjubj)}(hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };h]hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };}hj^sbah}(h]h ]h"]h$]h&]jj uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK{hjubj9)}(h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h]h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌu64_to_user_ptr (C macro)c.u64_to_user_ptrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]h)}(hu64_to_user_ptrh]h)}(hjh]hu64_to_user_ptr}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``u64_to_user_ptr (x)``h]j?)}(hjh]hu64_to_user_ptr (x)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjhhubjU)}(h>cast a pointer passed as u64 from user space to void __user * h]j9)}(h=cast a pointer passed as u64 from user space to void __user *h]h=cast a pointer passed as u64 from user space to void __user *}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(h**Parameters** ``x`` The u64 value from user space, usually via IOCTL **Description** u64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j)}(h7``x`` The u64 value from user space, usually via IOCTL h](j)}(h``x``h]j?)}(hj&h]hx}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj ubj)}(hhh]j9)}(h0The u64 value from user space, usually via IOCTLh]h0The u64 value from user space, usually via IOCTL}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj9)}(hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h]hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌis_insidevar (C macro)c.is_insidevarhNtauh1hhjhhhNhNubh)}(hhh](h)}(h is_insidevarh]h)}(h is_insidevarh]h)}(h is_insidevarh]h)}(hjh]h is_insidevar}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``is_insidevar (ptr, var)``h]j?)}(hjh]his_insidevar (ptr, var)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjhhubjU)}(h=check if the **ptr** points inside the **var** memory range. h]j9)}(hhjRubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjNubj)}(hhh]j9)}(h the pointer to a memory address.h]h the pointer to a memory address.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjKubj)}(hG``var`` the variable which address and size identify the memory range. h](j)}(h``var``h]j?)}(hjh]hvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j9)}(h>the variable which address and size identify the memory range.h]h>the variable which address and size identify the memory range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj/ubj9)}(h^Evaluates to true if the address in **ptr** lies within the memory range allocated to **var**.h](h$Evaluates to true if the address in }(hjhhhNhNubjz)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh+ lies within the memory range allocated to }(hjhhhNhNubjz)}(h**var**h]hvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌupper_32_bits (C macro)c.upper_32_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]h)}(h upper_32_bitsh]h)}(hj+h]h upper_32_bits}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj-hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj)hhhjHhKubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1hhjHhKhj&hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj&hhhjHhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhjhNhNubj9)}(h``upper_32_bits (n)``h]j?)}(hjgh]hupper_32_bits (n)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjeubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hjhhubjU)}(hreturn bits 32-63 of a number h]j9)}(hreturn bits 32-63 of a numberh]hreturn bits 32-63 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj}ubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(h**Parameters** ``n`` the number we're accessing **Description** A basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hjubj)}(hhh]j)}(h!``n`` the number we're accessing h](j)}(h``n``h]j?)}(hjh]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j9)}(hthe number we're accessingh]hthe number we’re accessing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hjubj9)}(hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h]hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the “right shift count >= width of type” warning when that quantity is 32-bits.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌlower_32_bits (C macro)c.lower_32_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h lower_32_bitsh]h)}(h lower_32_bitsh]h)}(h lower_32_bitsh]h)}(hj5h]h lower_32_bits}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjRhKubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjRhKhj0hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhj0hhhjRhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jkj4jkj5j6j7uh1hhhhjhNhNubj9)}(h``lower_32_bits (n)``h]j?)}(hjqh]hlower_32_bits (n)}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjoubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjhhubjU)}(hreturn bits 0-31 of a number h]j9)}(hreturn bits 0-31 of a numberh]hreturn bits 0-31 of a number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jThjhKhjhhubjp)}(h2**Parameters** ``n`` the number we're accessingh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]j?)}(hjh]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j9)}(hthe number we're accessingh]hthe number we’re accessing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌupper_16_bits (C macro)c.upper_16_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h upper_16_bitsh]h)}(h upper_16_bitsh]h)}(h upper_16_bitsh]h)}(hjh]h upper_16_bits}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj6hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj6hKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj6hKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jOj4jOj5j6j7uh1hhhhjhNhNubj9)}(h``upper_16_bits (n)``h]j?)}(hjUh]hupper_16_bits (n)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjSubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjhhubjU)}(hreturn bits 16-31 of a number h]j9)}(hreturn bits 16-31 of a numberh]hreturn bits 16-31 of a number}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjkubah}(h]h ]h"]h$]h&]uh1jThj}hKhjhhubjp)}(h2**Parameters** ``n`` the number we're accessingh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]j?)}(hjh]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j9)}(hthe number we're accessingh]hthe number we’re accessing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌlower_16_bits (C macro)c.lower_16_bitshNtauh1hhjhhhNhNubh)}(hhh](h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]h)}(h lower_16_bitsh]h)}(hjh]h lower_16_bits}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3j3j4j3j5j6j7uh1hhhhjhNhNubj9)}(h``lower_16_bits (n)``h]j?)}(hj9h]hlower_16_bits (n)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjhhubjU)}(hreturn bits 0-15 of a number h]j9)}(hreturn bits 0-15 of a numberh]hreturn bits 0-15 of a number}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjOubah}(h]h ]h"]h$]h&]uh1jThjahKhjhhubjp)}(h2**Parameters** ``n`` the number we're accessingh](j9)}(h**Parameters**h]jz)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK!hjhubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]j?)}(hjh]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#hjubj)}(hhh]j9)}(hthe number we're accessingh]hthe number we’re accessing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌREPEAT_BYTE (C macro) c.REPEAT_BYTEhNtauh1hhjhhhNhNubh)}(hhh](h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]h)}(h REPEAT_BYTEh]h)}(hjh]h REPEAT_BYTE}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#ubah}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhK#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhK#hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK#ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubj9)}(h``REPEAT_BYTE (x)``h]j?)}(hjh]hREPEAT_BYTE (x)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK%hjhhubjU)}(h@repeat the value **x** multiple times as an unsigned long value h]j9)}(h?repeat the value **x** multiple times as an unsigned long valueh](hrepeat the value }(hj7hhhNhNubjz)}(h**x**h]hx}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubh) multiple times as an unsigned long value}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK#hj3ubah}(h]h ]h"]h$]h&]uh1jThjWhK#hjhhubjp)}(hv**Parameters** ``x`` value to repeat **NOTE** **x** is not checked for > 0xff; larger values produce odd results.h](j9)}(h**Parameters**h]jz)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK'hj^ubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK$hj}ubj)}(hhh]j9)}(hvalue to repeath]hvalue to repeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK$hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhK$hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubj9)}(h**NOTE**h]jz)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hj^ubj9)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](jz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh> is not checked for > 0xff; larger values produce odd results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌREPEAT_BYTE_U32 (C macro)c.REPEAT_BYTE_U32hNtauh1hhjhhhNhNubh)}(hhh](h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]h)}(hREPEAT_BYTE_U32h]h)}(hj h]hREPEAT_BYTE_U32}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK+ubah}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj(hK+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj(hK+hjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj(hK+ubeh}(h]h ](j-macroeh"]h$]h&]j2j-j3jAj4jAj5j6j7uh1hhhhjhNhNubj9)}(h``REPEAT_BYTE_U32 (x)``h]j?)}(hjGh]hREPEAT_BYTE_U32 (x)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjEubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK-hjhhubjU)}(h5repeat the value **x** multiple times as a u32 value h]j9)}(h4repeat the value **x** multiple times as a u32 valueh](hrepeat the value }(hjahhhNhNubjz)}(h**x**h]hx}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubh multiple times as a u32 value}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK+hj]ubah}(h]h ]h"]h$]h&]uh1jThjhK+hjhhubjp)}(hv**Parameters** ``x`` value to repeat **NOTE** **x** is not checked for > 0xff; larger values produce odd results.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK/hjubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]j?)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK,hjubj)}(hhh]j9)}(hvalue to repeath]hvalue to repeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**NOTE**h]jz)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hjubj9)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](jz)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh> is not checked for > 0xff; larger values produce odd results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8h[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_list_lock (C function)c.console_list_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_list_lock (void)h]h)}(hvoid console_list_lock(void)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7hhhjIhKubh)}(hconsole_list_lockh]h)}(hconsole_list_lockh]hconsole_list_lock}(hj\hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjXubah}(h]h ](jjeh"]h$]h&]jj uh1hhj7hhhjIhKubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjpubah}(h]h ]h"]h$]h&]jj uh1jhj7hhhjIhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj3hhhjIhKubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1hhjIhKhj0hhubj )}(hhh]j9)}(hLock the console listJh]hLock the console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hd**Parameters** ``void`` no arguments **Description** For console list or console->flags updatesh](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(h*For console list or console->flags updatesh]h*For console list or console->flags updates}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ console_list_unlock (C function)c.console_list_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_list_unlock (void)h]h)}(hvoid console_list_unlock(void)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM ubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_hhhjqhM ubh)}(hconsole_list_unlockh]h)}(hconsole_list_unlockh]hconsole_list_unlock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj_hhhjqhM ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhj_hhhjqhM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj[hhhjqhM ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1hhjqhM hjXhhubj )}(hhh]j9)}(hUnlock the console listh]hUnlock the console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h\**Parameters** ``void`` no arguments **Description** Counterpart to console_list_lock()h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj h]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(h"Counterpart to console_list_lock()h]h"Counterpart to console_list_lock()}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#console_srcu_read_lock (C function)c.console_srcu_read_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h!int console_srcu_read_lock (void)h]h)}(h int console_srcu_read_lock(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hconsole_srcu_read_lockh]h)}(hconsole_srcu_read_lockh]hconsole_srcu_read_lock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h9Register a new reader for the SRCU-protected console listh]h9Register a new reader for the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``void`` no arguments **Description** Use for_each_console_srcu() to iterate the console list **Context** Any context. **Return** A cookie to pass to console_srcu_read_unlock().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj3h]hvoid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj-ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(h7Use for_each_console_srcu() to iterate the console listh]h7Use for_each_console_srcu() to iterate the console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h Any context.h]h Any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h/A cookie to pass to console_srcu_read_unlock().h]h/A cookie to pass to console_srcu_read_unlock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%console_srcu_read_unlock (C function)c.console_srcu_read_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*void console_srcu_read_unlock (int cookie)h]h)}(h)void console_srcu_read_unlock(int cookie)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhM(ubh)}(hconsole_srcu_read_unlockh]h)}(hconsole_srcu_read_unlockh]hconsole_srcu_read_unlock}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhM(ubj )}(h (int cookie)h]j&)}(h int cookieh](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:ubh)}(hcookieh]hcookie}(hjZhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj6ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhM(hjhhubj )}(hhh]j9)}(h=Unregister an old reader from the SRCU-protected console listh]h=Unregister an old reader from the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``int cookie`` cookie returned from console_srcu_read_lock() **Description** Counterpart to console_srcu_read_lock()h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hjubj)}(hhh]j)}(h=``int cookie`` cookie returned from console_srcu_read_lock() h](j)}(h``int cookie``h]j?)}(hjh]h int cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM*hjubj)}(hhh]j9)}(h-cookie returned from console_srcu_read_lock()h]h-cookie returned from console_srcu_read_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hjubj9)}(h'Counterpart to console_srcu_read_lock()h]h'Counterpart to console_srcu_read_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ7match_devname_and_update_preferred_console (C function),c.match_devname_and_update_preferred_consolehNtauh1hhjhhhNhNubh)}(hhh](h)}(hgint match_devname_and_update_preferred_console (const char *devname, const char *name, const short idx)h]h)}(hfint match_devname_and_update_preferred_console(const char *devname, const char *name, const short idx)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM ubj=)}(h h]h }(hjThhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAhhhjShM ubh)}(h*match_devname_and_update_preferred_consoleh]h)}(h*match_devname_and_update_preferred_consoleh]h*match_devname_and_update_preferred_console}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbubah}(h]h ](jjeh"]h$]h&]jj uh1hhjAhhhjShM ubj )}(h8(const char *devname, const char *name, const short idx)h](j&)}(hconst char *devnameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hdevnameh]hdevname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubj&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnameh]hname}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubj&)}(hconst short idxh](j+)}(hj<*h]hconst}(hj<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8ubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hshorth]hshort}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubh)}(hidxh]hidx}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjzubeh}(h]h ]h"]h$]h&]jj uh1jhjAhhhjShM ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhjShM ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhjShM hj:hhubj )}(hhh]j9)}(h:Update a preferred console when matching devname is found.h]h:Update a preferred console when matching devname is found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj:hhhjShM ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``const char *devname`` DEVNAME:0.0 style device name ``const char *name`` Name of the corresponding console driver, e.g. "ttyS" ``const short idx`` Console index, e.g. port number. **Description** The function checks whether a device with the given **devname** is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device. It might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with. **Return** 0 on success, negative error code on failure.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh](j)}(h6``const char *devname`` DEVNAME:0.0 style device name h](j)}(h``const char *devname``h]j?)}(hjh]hconst char *devname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]j9)}(hDEVNAME:0.0 style device nameh]hDEVNAME:0.0 style device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hK``const char *name`` Name of the corresponding console driver, e.g. "ttyS" h](j)}(h``const char *name``h]j?)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]j9)}(h5Name of the corresponding console driver, e.g. "ttyS"h]h9Name of the corresponding console driver, e.g. “ttyS”}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjubj)}(h5``const short idx`` Console index, e.g. port number. h](j)}(h``const short idx``h]j?)}(hjPh]hconst short idx}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjJubj)}(hhh]j9)}(h Console index, e.g. port number.h]h Console index, e.g. port number.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj9)}(hX The function checks whether a device with the given **devname** is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.h](h4The function checks whether a device with the given }(hjhhhNhNubjz)}(h **devname**h]hdevname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj9)}(hIt might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with.h]hIt might be used when a driver subsystem initializes particular devices with already known DEVNAME:0.0 style names. And it could predict which console driver name and index this device would later get associated with.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj9)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_lock (C function)c.console_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_lock (void)h]h)}(hvoid console_lock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMA ubj=)}(h h]h }(hj'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj&hMA ubh)}(h console_lockh]h)}(h console_lockh]h console_lock}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj&hMA ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjMubah}(h]h ]h"]h$]h&]jj uh1jhjhhhj&hMA ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj&hMA ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMA hj hhubj )}(hhh]j9)}(h)block the console subsystem from printingh]h)block the console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMA hj|hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hMA ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``void`` no arguments **Description** Acquires a lock which guarantees that no consoles will be in or enter their write() callback. Can sleep, returns nothing.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.h]h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMB hjubj9)}(hCan sleep, returns nothing.h]hCan sleep, returns nothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_trylock (C function)c.console_trylockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hint console_trylock (void)h]h)}(hint console_trylock(void)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMW ubj=)}(h h]h }(hj^hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKhhhj]hMW ubh)}(hconsole_trylockh]h)}(hconsole_trylockh]hconsole_trylock}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjlubah}(h]h ](jjeh"]h$]h&]jj uh1hhjKhhhj]hMW ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjKhhhj]hMW ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjGhhhj]hMW ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1hhj]hMW hjDhhubj )}(hhh]j9)}(h0try to block the console subsystem from printingh]h0try to block the console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMW hjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hMW ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``void`` no arguments **Description** Try to acquire a lock which guarantees that no consoles will be in or enter their write() callback. returns 1 on success, and 0 on failure to acquire the lock.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(hcTry to acquire a lock which guarantees that no consoles will be in or enter their write() callback.h]hcTry to acquire a lock which guarantees that no consoles will be in or enter their write() callback.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMX hjubj9)}(h;returns 1 on success, and 0 on failure to acquire the lock.h]h;returns 1 on success, and 0 on failure to acquire the lock.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌconsole_unlock (C function)c.console_unlockhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid console_unlock (void)h]h)}(hvoid console_unlock(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMD ubh)}(hconsole_unlockh]h)}(hconsole_unlockh]hconsole_unlock}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMD ubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMD ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj~hhhjhMD ubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1hhjhMD hj{hhubj )}(hhh]j9)}(h2unblock the legacy console subsystem from printingh]h2unblock the legacy console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD hjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMD ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``void`` no arguments **Description** Releases the console_lock which the caller holds to block printing of the legacy console subsystem. While the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock. console_unlock(); may be called from any context.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hj.h]hvoid}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj,ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj(ubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjChKhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj ubj9)}(hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.h]hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hj ubj9)}(hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.h]hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hj ubj9)}(h1console_unlock(); may be called from any context.h]h1console_unlock(); may be called from any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chML hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ+console_force_preferred_locked (C function) c.console_force_preferred_lockedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9void console_force_preferred_locked (struct console *con)h]h)}(h8void console_force_preferred_locked(struct console *con)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hconsole_force_preferred_lockedh]h)}(hconsole_force_preferred_lockedh]hconsole_force_preferred_locked}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct console *con)h]j&)}(hstruct console *conh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hconsoleh]hconsole}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_jsb c.console_force_preferred_lockedasbuh1hhjubj=)}(h h]h }(hjGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hconh]hcon}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h$force a registered console preferredh]h$force a registered console preferred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct console *con`` The registered console to force preferred. **Description** Must be called under console_list_lock().h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(hC``struct console *con`` The registered console to force preferred. h](j)}(h``struct console *con``h]j?)}(hjh]hstruct console *con}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(h*The registered console to force preferred.h]h*The registered console to force preferred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h)Must be called under console_list_lock().h]h)Must be called under console_list_lock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#printk_timed_ratelimit (C function)c.printk_timed_ratelimithNtauh1hhjhhhNhNubh)}(hhh](h)}(hXbool printk_timed_ratelimit (unsigned long *caller_jiffies, unsigned int interval_msecs)h]h)}(hWbool printk_timed_ratelimit(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j)}(hjh]hbool}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hj[hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhjZhMubh)}(hprintk_timed_ratelimith]h)}(hprintk_timed_ratelimith]hprintk_timed_ratelimit}(hjmhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjZhMubj )}(h<(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j&)}(hunsigned long *caller_jiffiesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hcaller_jiffiesh]hcaller_jiffies}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hunsigned int interval_msecsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hinterval_msecsh]hinterval_msecs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjIhhhjZhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjZhMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhjZhMhjBhhubj )}(hhh]j9)}(h%caller-controlled printk ratelimitingh]h%caller-controlled printk ratelimiting}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jaj4jaj5j6j7uh1hhhhjhNhNubjp)}(hX>**Parameters** ``unsigned long *caller_jiffies`` pointer to caller's state ``unsigned int interval_msecs`` minimum interval between prints **Description** printk_timed_ratelimit() returns true if more than **interval_msecs** milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.h](j9)}(h**Parameters**h]jz)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjeubj)}(hhh](j)}(h<``unsigned long *caller_jiffies`` pointer to caller's state h](j)}(h!``unsigned long *caller_jiffies``h]j?)}(hjh]hunsigned long *caller_jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(hpointer to caller's stateh]hpointer to caller’s state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``unsigned int interval_msecs`` minimum interval between prints h](j)}(h``unsigned int interval_msecs``h]j?)}(hjh]hunsigned int interval_msecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(hminimum interval between printsh]hminimum interval between prints}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjeubj9)}(hprintk_timed_ratelimit() returns true if more than **interval_msecs** milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.h](h3printk_timed_ratelimit() returns true if more than }(hjhhhNhNubjz)}(h**interval_msecs**h]hinterval_msecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhV milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_register (C function)c.kmsg_dump_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3int kmsg_dump_register (struct kmsg_dumper *dumper)h]h)}(h2int kmsg_dump_register(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjdhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQhhhjchMubh)}(hkmsg_dump_registerh]h)}(hkmsg_dump_registerh]hkmsg_dump_register}(hjvhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQhhhjchMubj )}(h(struct kmsg_dumper *dumper)h]j&)}(hstruct kmsg_dumper *dumperh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h kmsg_dumperh]h kmsg_dumper}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jxsbc.kmsg_dump_registerasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdumperh]hdumper}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjQhhhjchMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjMhhhjchMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1hhjchMhjJhhubj )}(hhh]j9)}(hregister a kernel log dumper.h]hregister a kernel log dumper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhjhNhNubjp)}(hX4**Parameters** ``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure **Description** Adds a kernel log dumper to the system. The dump callback in the structure will be called when the kernel oopses or panics and must be set. Returns zero on success and ``-EINVAL`` or ``-EBUSY`` otherwise.h](j9)}(h**Parameters**h]jz)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj1ubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]j?)}(hjVh]hstruct kmsg_dumper *dumper}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjTubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjPubj)}(hhh]j9)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj1ubj9)}(hAdds a kernel log dumper to the system. The dump callback in the structure will be called when the kernel oopses or panics and must be set. Returns zero on success and ``-EINVAL`` or ``-EBUSY`` otherwise.h](hAdds a kernel log dumper to the system. The dump callback in the structure will be called when the kernel oopses or panics and must be set. Returns zero on success and }(hjhhhNhNubj?)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh or }(hjhhhNhNubj?)}(h ``-EBUSY``h]h-EBUSY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmsg_dump_unregister (C function)c.kmsg_dump_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int kmsg_dump_unregister (struct kmsg_dumper *dumper)h]h)}(h4int kmsg_dump_unregister(struct kmsg_dumper *dumper)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkmsg_dump_unregisterh]h)}(hkmsg_dump_unregisterh]hkmsg_dump_unregister}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct kmsg_dumper *dumper)h]j&)}(hstruct kmsg_dumper *dumperh](j+)}(hj.h]hstruct}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj3ubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubh)}(hhh]h)}(h kmsg_dumperh]h kmsg_dumper}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjWmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kmsg_dump_unregisterasbuh1hhj3ubj=)}(h h]h }(hjuhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hdumperh]hdumper}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hunregister a kmsg dumper.h]hunregister a kmsg dumper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure **Description** Removes a dump device from the system. Returns zero on success and ``-EINVAL`` otherwise.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]j?)}(hjh]hstruct kmsg_dumper *dumper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(hYRemoves a dump device from the system. Returns zero on success and ``-EINVAL`` otherwise.h](hCRemoves a dump device from the system. Returns zero on success and }(hjLhhhNhNubj?)}(h ``-EINVAL``h]h-EINVAL}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjLubh otherwise.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_get_line (C function)c.kmsg_dump_get_linehNtauh1hhjhhhNhNubh)}(hhh](h)}(hhbool kmsg_dump_get_line (struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h]h)}(hgbool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkmsg_dump_get_lineh]h)}(hkmsg_dump_get_lineh]hkmsg_dump_get_line}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hP(struct kmsg_dump_iter *iter, bool syslog, char *line, size_t size, size_t *len)h](j&)}(hstruct kmsg_dump_iter *iterh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsbc.kmsg_dump_get_lineasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hiterh]hiter}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h bool syslogh](j)}(hjh]hbool}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj=)}(h h]h }(hjHhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj7ubh)}(hsyslogh]hsyslog}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h char *lineh](j)}(hcharh]hchar}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj=)}(h h]h }(hj}hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hlineh]hline}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kmsg_dump_get_lineasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h size_t *lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kmsg_dump_get_lineasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlenh]hlen}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hretrieve one kmsg log lineh]hretrieve one kmsg log line}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jwj4jwj5j6j7uh1hhhhjhNhNubjp)}(hXO**Parameters** ``struct kmsg_dump_iter *iter`` kmsg dump iterator ``bool syslog`` include the "<4>" prefixes ``char *line`` buffer to copy the line to ``size_t size`` maximum size of the buffer ``size_t *len`` length of line placed into buffer **Description** Start at the beginning of the kmsg buffer, with the oldest kmsg record, and copy one record into the provided buffer. Consecutive calls will return the next available record moving towards the end of the buffer with the youngest messages. A return value of FALSE indicates that there are no more records to read.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj{ubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]j?)}(hjh]hstruct kmsg_dump_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]j?)}(hjh]h bool syslog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``char *line`` buffer to copy the line to h](j)}(h``char *line``h]j?)}(hjh]h char *line}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj ubj)}(hhh]j9)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]j?)}(hjKh]h size_t size}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjIubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjEubj)}(hhh]j9)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjubj)}(h2``size_t *len`` length of line placed into buffer h](j)}(h``size_t *len``h]j?)}(hjh]h size_t *len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj~ubj)}(hhh]j9)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj{ubj9)}(huStart at the beginning of the kmsg buffer, with the oldest kmsg record, and copy one record into the provided buffer.h]huStart at the beginning of the kmsg buffer, with the oldest kmsg record, and copy one record into the provided buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj{ubj9)}(hxConsecutive calls will return the next available record moving towards the end of the buffer with the youngest messages.h]hxConsecutive calls will return the next available record moving towards the end of the buffer with the youngest messages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj{ubj9)}(hIA return value of FALSE indicates that there are no more records to read.h]hIA return value of FALSE indicates that there are no more records to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!kmsg_dump_get_buffer (C function)c.kmsg_dump_get_bufferhNtauh1hhjhhhNhNubh)}(hhh](h)}(hmbool kmsg_dump_get_buffer (struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h]h)}(hlbool kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h](j)}(hjh]hbool}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMJubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhj/hMJubh)}(hkmsg_dump_get_bufferh]h)}(hkmsg_dump_get_bufferh]hkmsg_dump_get_buffer}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhj/hMJubj )}(hS(struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h](j&)}(hstruct kmsg_dump_iter *iterh](j+)}(hj.h]hstruct}(hj^hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjZubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj~modnameN classnameNjcjf)}ji]jl)}j_jDsbc.kmsg_dump_get_bufferasbuh1hhjZubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjZubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjVubj&)}(h bool syslogh](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsyslogh]hsyslog}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjVubj&)}(h char *bufh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hbufh]hbuf}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjVubj&)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjKmodnameN classnameNjcjf)}ji]jc.kmsg_dump_get_bufferasbuh1hhjBubj=)}(h h]h }(hjghhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjBubh)}(hsizeh]hsize}(hjuhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjVubj&)}(hsize_t *len_outh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.kmsg_dump_get_bufferasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hlen_outh]hlen_out}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjVubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhj/hMJubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj/hMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj/hMJhjhhubj )}(hhh]j9)}(hcopy kmsg log linesh]hcopy kmsg log lines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMJubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhjhNhNubjp)}(hX**Parameters** ``struct kmsg_dump_iter *iter`` kmsg dump iterator ``bool syslog`` include the "<4>" prefixes ``char *buf`` buffer to copy the line to ``size_t size`` maximum size of the buffer ``size_t *len_out`` length of line placed into buffer **Description** Start at the end of the kmsg buffer and fill the provided buffer with as many of the *youngest* kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call. Consecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones. A return value of FALSE indicates that there are no more records to read.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]j?)}(hj5h]hstruct kmsg_dump_iter *iter}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMKhj/ubj)}(hhh]j9)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjJhMKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMKhj,ubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]j?)}(hjnh]h bool syslog}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjlubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMLhjhubj)}(hhh]j9)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj,ubj)}(h)``char *buf`` buffer to copy the line to h](j)}(h ``char *buf``h]j?)}(hjh]h char *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMMhjubj)}(hhh]j9)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhj,ubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]j?)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjubj)}(hhh]j9)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhj,ubj)}(h6``size_t *len_out`` length of line placed into buffer h](j)}(h``size_t *len_out``h]j?)}(hjh]hsize_t *len_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMOhjubj)}(hhh]j9)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMOhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMOhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMQhjubj9)}(hStart at the end of the kmsg buffer and fill the provided buffer with as many of the *youngest* kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.h](hUStart at the end of the kmsg buffer and fill the provided buffer with as many of the }(hjjhhhNhNubj3)}(h *youngest*h]hyoungest}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjjubh| kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMPhjubj9)}(hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.h]hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMUhjubj9)}(hIA return value of FALSE indicates that there are no more records to read.h]hIA return value of FALSE indicates that there are no more records to read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkmsg_dump_rewind (C function)c.kmsg_dump_rewindhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void kmsg_dump_rewind (struct kmsg_dump_iter *iter)h]h)}(h2void kmsg_dump_rewind(struct kmsg_dump_iter *iter)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hkmsg_dump_rewindh]h)}(hkmsg_dump_rewindh]hkmsg_dump_rewind}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(struct kmsg_dump_iter *iter)h]j&)}(hstruct kmsg_dump_iter *iterh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jl)}j_jsbc.kmsg_dump_rewindasbuh1hhjubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hiterh]hiter}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(hreset the iteratorh]hreset the iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``struct kmsg_dump_iter *iter`` kmsg dump iterator **Description** Reset the dumper's iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]j?)}(hjh]hstruct kmsg_dump_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j9)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(hReset the dumper's iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.h]hReset the dumper’s iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#__printk_cpu_sync_wait (C function)c.__printk_cpu_sync_waithNtauh1hhjhhhNhNubh)}(hhh](h)}(h"void __printk_cpu_sync_wait (void)h]h)}(h!void __printk_cpu_sync_wait(void)h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjYhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFhhhjXhMubh)}(h__printk_cpu_sync_waith]h)}(h__printk_cpu_sync_waith]h__printk_cpu_sync_wait}(hjkhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubah}(h]h ](jjeh"]h$]h&]jj uh1hhjFhhhjXhMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhjXhMhj?hhubj )}(hhh]j9)}(hOBusy wait until the printk cpu-reentrant spinning lock is not owned by any CPU.h]hOBusy wait until the printk cpu-reentrant spinning lock is not owned by any CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hB**Parameters** ``void`` no arguments **Context** Any context.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h **Context**h]jz)}(hj-h]hContext}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(h Any context.h]h Any context.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&__printk_cpu_sync_try_get (C function)c.__printk_cpu_sync_try_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h$int __printk_cpu_sync_try_get (void)h]h)}(h#int __printk_cpu_sync_try_get(void)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjnhhhjhMubh)}(h__printk_cpu_sync_try_geth]h)}(h__printk_cpu_sync_try_geth]h__printk_cpu_sync_try_get}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjnhhhjhMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjghhubj )}(hhh]j9)}(h6Try to acquire the printk cpu-reentrant spinning lock.h]h6Try to acquire the printk cpu-reentrant spinning lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhjhNhNubjp)}(hXX**Parameters** ``void`` no arguments **Description** If no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately. **Context** Any context. Expects interrupts to be disabled. **Return** 1 on success, otherwise 0.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hKhjubah}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj9)}(hIf no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately.h]hIf no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h **Context**h]jz)}(hj|h]hContext}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj9)}(h1 on success, otherwise 0.h]h1 on success, otherwise 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"__printk_cpu_sync_put (C function)c.__printk_cpu_sync_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void __printk_cpu_sync_put (void)h]h)}(h void __printk_cpu_sync_put(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(h__printk_cpu_sync_puth]h)}(h__printk_cpu_sync_puth]h__printk_cpu_sync_put}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(h(void)h]j&)}(hvoidh]j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjubah}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h/Release the printk cpu-reentrant spinning lock.h]h/Release the printk cpu-reentrant spinning lock.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jgj4jgj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``void`` no arguments **Description** The calling processor must be the owner of the lock. **Context** Any context. Expects interrupts to be disabled.h](j9)}(h**Parameters**h]jz)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjkubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j?)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]j9)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjkubj9)}(h4The calling processor must be the owner of the lock.h]h4The calling processor must be the owner of the lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjkubj9)}(h **Context**h]jz)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjkubj9)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌvpanic (C function)c.vpanichNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void vpanic (const char *fmt, va_list args)h]h)}(h*void vpanic(const char *fmt, va_list args)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM:ubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj3hhhjEhM:ubh)}(hvpanich]h)}(hvpanich]hvpanic}(hjXhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubah}(h]h ](jjeh"]h$]h&]jj uh1hhj3hhhjEhM:ubj )}(h(const char *fmt, va_list args)h](j&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hjthhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjpubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubj&)}(h va_list argsh](h)}(hhh]h)}(hva_listh]hva_list}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jZsbc.vpanicasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjlubeh}(h]h ]h"]h$]h&]jj uh1jhj3hhhjEhM:ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj/hhhjEhM:ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1hhjEhM:hj,hhubj )}(hhh]j9)}(hhalt the systemh]hhalt the system}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM:hj)hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhM:ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jDj4jDj5j6j7uh1hhhhjhNhNubjp)}(h**Parameters** ``const char *fmt`` The text string to print ``va_list args`` Arguments for the format string **Description** Display a message, then perform cleanups. This function never returns.h](j9)}(h**Parameters**h]jz)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM>hjHubj)}(hhh](j)}(h-``const char *fmt`` The text string to print h](j)}(h``const char *fmt``h]j?)}(hjmh]hconst char *fmt}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjkubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM;hjgubj)}(hhh]j9)}(hThe text string to printh]hThe text string to print}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjdubj)}(h1``va_list args`` Arguments for the format string h](j)}(h``va_list args``h]j?)}(hjh]h va_list args}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM<hjubj)}(hhh]j9)}(hArguments for the format stringh]hArguments for the format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjdubeh}(h]h ]h"]h$]h&]uh1jhjHubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM>hjHubj9)}(hFDisplay a message, then perform cleanups. This function never returns.h]hFDisplay a message, then perform cleanups. This function never returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM=hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌadd_taint (C function) c.add_tainthNtauh1hhjhhhNhNubh)}(hhh](h)}(h:void add_taint (unsigned flag, enum lockdep_ok lockdep_ok)h]h)}(h9void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"hhhj4hMubh)}(h add_tainth]h)}(h add_tainth]h add_taint}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"hhhj4hMubj )}(h+(unsigned flag, enum lockdep_ok lockdep_ok)h](j&)}(h unsigned flagh](j)}(hunsignedh]hunsigned}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj=)}(h h]h }(hjqhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj_ubh)}(hflagh]hflag}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubj&)}(henum lockdep_ok lockdep_okh](j+)}(hjh]henum}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(h lockdep_okh]h lockdep_ok}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jIsb c.add_taintasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(h lockdep_okh]h lockdep_ok}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj[ubeh}(h]h ]h"]h$]h&]jj uh1jhj"hhhj4hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhj4hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhj4hMhjhhubj )}(hhh]j9)}(h$add a taint flag if not already set.h]h$add a taint flag if not already set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j&j4j&j5j6j7uh1hhhhjhNhNubjp)}(hX)**Parameters** ``unsigned flag`` one of the TAINT_* constants. ``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. **Description** If something bad has gone wrong, you'll want **lockdebug_ok** = false, but for some notewortht-but-not-corrupting cases, it can be set to true.h](j9)}(h**Parameters**h]jz)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhj*ubj)}(hhh](j)}(h0``unsigned flag`` one of the TAINT_* constants. h](j)}(h``unsigned flag``h]j?)}(hjOh]h unsigned flag}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjMubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjIubj)}(hhh]j9)}(hone of the TAINT_* constants.h]hone of the TAINT_* constants.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(hC``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. h](j)}(h``enum lockdep_ok lockdep_ok``h]j?)}(hjh]henum lockdep_ok lockdep_ok}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh]j9)}(h#whether lock debugging is still OK.h]h#whether lock debugging is still OK.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhj*ubj9)}(hIf something bad has gone wrong, you'll want **lockdebug_ok** = false, but for some notewortht-but-not-corrupting cases, it can be set to true.h](h/If something bad has gone wrong, you’ll want }(hjhhhNhNubjz)}(h**lockdebug_ok**h]h lockdebug_ok}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johjhhhNhNubeh}(h]kernel-utility-functionsah ]h"]kernel utility functionsah$]h&]uh1hhhhhhhhKsubh)}(hhh](h)}(hDevice Resource Managementh]hDevice Resource Management}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ __devres_alloc_node (C function)c.__devres_alloc_nodehNtauh1hhj hhhNhNubh)}(hhh](h)}(hdvoid * __devres_alloc_node (dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h]h)}(hbvoid *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/hhhjAhKubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhKubh)}(h__devres_alloc_nodeh]h)}(h__devres_alloc_nodeh]h__devres_alloc_node}(hjahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj]ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj/hhhjAhKubj )}(hI(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jcsbc.__devres_alloc_nodeasbuh1hhjyubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjyubh)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.__devres_alloc_nodeasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.__devres_alloc_nodeasbuh1hhj ubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hgfph]hgfp}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(hint nidh](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjSubh)}(hnidh]hnid}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubj&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hnameh]hname}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjuubeh}(h]h ]h"]h$]h&]jj uh1jhj/hhhjAhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj+hhhjAhKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1hhjAhKhj(hhubj )}(hhh]j9)}(hAllocate device resource datah]hAllocate device resource data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``dr_release_t release`` Release function devres will be associated with ``size_t size`` Allocation size ``gfp_t gfp`` Allocation flags ``int nid`` NUMA node ``const char *name`` Name of the resource **Description** Allocate devres of **size** bytes. The allocated area is zeroed, then associated with **release**. The returned pointer can be passed to other devres_*() functions. **Return** Pointer to allocated devres on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(hI``dr_release_t release`` Release function devres will be associated with h](j)}(h``dr_release_t release``h]j?)}(hj;h]hdr_release_t release}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj5ubj)}(hhh]j9)}(h/Release function devres will be associated withh]h/Release function devres will be associated with}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhj2ubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]j?)}(hjth]h size_t size}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjnubj)}(hhh]j9)}(hAllocation sizeh]hAllocation size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhj2ubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]j?)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j9)}(hAllocation flagsh]hAllocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj2ubj)}(h``int nid`` NUMA node h](j)}(h ``int nid``h]j?)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j9)}(h NUMA nodeh]h NUMA node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj2ubj)}(h*``const char *name`` Name of the resource h](j)}(h``const char *name``h]j?)}(hjh]hconst char *name}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j9)}(hName of the resourceh]hName of the resource}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(hAllocate devres of **size** bytes. The allocated area is zeroed, then associated with **release**. The returned pointer can be passed to other devres_*() functions.h](hAllocate devres of }(hjphhhNhNubjz)}(h**size**h]hsize}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubh< bytes. The allocated area is zeroed, then associated with }(hjphhhNhNubjz)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubhD. The returned pointer can be passed to other devres_*() functions.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(h8Pointer to allocated devres on success, NULL on failure.h]h8Pointer to allocated devres on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devres_for_each_res (C function)c.devres_for_each_reshNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid devres_for_each_res (struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device *, void *, void *), void *data)h]h)}(hvoid devres_for_each_res(struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device*, void*, void*), void *data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhKubh)}(hdevres_for_each_resh]h)}(hdevres_for_each_resh]hdevres_for_each_res}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhKubj )}(h(struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device*, void*, void*), void *data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj#ubj=)}(h h]h }(hj4hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#ubh)}(hhh]h)}(hdeviceh]hdevice}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]jl)}j_j sbc.devres_for_each_resasbuh1hhj#ubj=)}(h h]h }(hjehhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jac.devres_for_each_resasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jac.devres_for_each_resasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj=)}(h h]h }(hj7hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(h match_datah]h match_data}(hjRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h(void (*fn)(struct device*, void*, void*)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjyhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hfnh]hfn}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjgubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubh)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jac.devres_for_each_resasbuh1hhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjk7h]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjk7h]h,}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj=)}(h h]h }(hjUhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjgubj)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h)}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhKhjhhubj )}(hhh]j9)}(hResource iteratorh]hResource iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX9**Parameters** ``struct device *dev`` Device to iterate resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function ``void (*fn)(struct device *, void *, void *)`` Function to be called for each matched resource. ``void *data`` Data for **fn**, the 3rd parameter of **fn** **Description** Call **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1. **Return** voidh](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(h7``struct device *dev`` Device to iterate resource from h](j)}(h``struct device *dev``h]j?)}(hj*h]hstruct device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj(ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj$ubj)}(hhh]j9)}(hDevice to iterate resource fromh]hDevice to iterate resource from}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hKhj!ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j?)}(hjch]hdr_release_t release}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjaubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj]ubj)}(hhh]j9)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhj!ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj!ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj!ubj)}(ha``void (*fn)(struct device *, void *, void *)`` Function to be called for each matched resource. h](j)}(h/``void (*fn)(struct device *, void *, void *)``h]j?)}(hj h]h+void (*fn)(struct device *, void *, void *)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh]j9)}(h0Function to be called for each matched resource.h]h0Function to be called for each matched resource.}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj# hKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hKhj!ubj)}(h<``void *data`` Data for **fn**, the 3rd parameter of **fn** h](j)}(h``void *data``h]j?)}(hjG h]h void *data}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjA ubj)}(hhh]j9)}(h,Data for **fn**, the 3rd parameter of **fn**h](h Data for }(hj` hhhNhNubjz)}(h**fn**h]hfn}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj` ubh, the 3rd parameter of }(hj` hhhNhNubjz)}(h**fn**h]hfn}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj` ubeh}(h]h ]h"]h$]h&]uh1j8hj\ hKhj] ubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1jhj\ hKhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(hnCall **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1.h](hCall }(hj hhhNhNubjz)}(h**fn**h]hfn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh for each devres of }(hj hhhNhNubjz)}(h**dev**h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh which is associated with }(hj hhhNhNubjz)}(h **release**h]hrelease}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh and for which }(hj hhhNhNubjz)}(h **match**h]hmatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh returns 1.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(h **Return**h]jz)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj9)}(hvoidh]hvoid}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_free (C function) c.devres_freehNtauh1hhj hhhNhNubh)}(hhh](h)}(hvoid devres_free (void *res)h]h)}(hvoid devres_free(void *res)h](j)}(hvoidh]hvoid}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubj=)}(h h]h }(hje hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR hhhjd hKubh)}(h devres_freeh]h)}(h devres_freeh]h devres_free}(hjw hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjs ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjR hhhjd hKubj )}(h (void *res)h]j&)}(h void *resh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hresh]hres}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubah}(h]h ]h"]h$]h&]jj uh1jhjR hhhjd hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhjN hhhjd hKubah}(h]jI ah ](jjeh"]h$]h&]jj)jhuh1hhjd hKhjK hhubj )}(hhh]j9)}(hFree device resource datah]hFree device resource data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjK hhhjd hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj hNhNubjp)}(hy**Parameters** ``void *res`` Pointer to devres data to free **Description** Free devres created with devres_alloc().h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh]j)}(h-``void *res`` Pointer to devres data to free h](j)}(h ``void *res``h]j?)}(hj' h]h void *res}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj% ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj! ubj)}(hhh]j9)}(hPointer to devres data to freeh]hPointer to devres data to free}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj< hKhj= ubah}(h]h ]h"]h$]h&]uh1jhj! ubeh}(h]h ]h"]h$]h&]uh1jhj< hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hjb h]h Description}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj` ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj9)}(h(Free devres created with devres_alloc().h]h(Free devres created with devres_alloc().}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_add (C function) c.devres_addhNtauh1hhj hhhNhNubh)}(hhh](h)}(h/void devres_add (struct device *dev, void *res)h]h)}(h.void devres_add(struct device *dev, void *res)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hKubh)}(h devres_addh]h)}(h devres_addh]h devres_add}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hKubj )}(h(struct device *dev, void *res)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj ubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubh)}(hhh]h)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj modnameN classnameNjcjf)}ji]jl)}j_j sb c.devres_addasbuh1hhj ubj=)}(h h]h }(hj" hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hdevh]hdev}(hj= hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubj&)}(h void *resh](j)}(hvoidh]hvoid}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj=)}(h h]h }(hjd hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR ubj)}(hjh]h*}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubh)}(hresh]hres}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj ubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hKhj hhubj )}(hhh]j9)}(hRegister device resourceh]hRegister device resource}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj hNhNubjp)}(hXC**Parameters** ``struct device *dev`` Device to add resource to ``void *res`` Resource to register **Description** Register devres **res** to **dev**. **res** should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh](j)}(h1``struct device *dev`` Device to add resource to h](j)}(h``struct device *dev``h]j?)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh]j9)}(hDevice to add resource toh]hDevice to add resource to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h#``void *res`` Resource to register h](j)}(h ``void *res``h]j?)}(hj# h]h void *res}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj! ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh]j9)}(hResource to registerh]hResource to register}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj8 hKhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj8 hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj^ h]h Description}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj9)}(hRegister devres **res** to **dev**. **res** should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.h](hRegister devres }(hjt hhhNhNubjz)}(h**res**h]hres}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt ubh to }(hjt hhhNhNubjz)}(h**dev**h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt ubh. }(hjt hhhNhNubjz)}(h**res**h]hres}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt ubh should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.}(hjt hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_find (C function) c.devres_findhNtauh1hhj hhhNhNubh)}(hhh](h)}(havoid * devres_find (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h_void *devres_find(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj hhhj hMubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubh)}(h devres_findh]h)}(h devres_findh]h devres_find}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhj hhhj hMubj )}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_j sb c.devres_findasbuh1hhjubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j] c.devres_findasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j] c.devres_findasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmatchh]hmatch}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(h match_datah]h match_data}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1hhj hMhj hhubj )}(hhh]j9)}(hFind device resourceh]hFind device resource}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to lookup resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** which is associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. **Return** Pointer to found devres, NULL if not found.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h6``struct device *dev`` Device to lookup resource from h](j)}(h``struct device *dev``h]j?)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]j9)}(hDevice to lookup resource fromh]hDevice to lookup resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j?)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]j9)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hj+h]hdr_match_t match}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj%ubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjdh]hvoid *match_data}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj^ubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj9)}(hFind the latest devres of **dev** which is associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all.h](hFind the latest devres of }(hjhhhNhNubjz)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh which is associated with }(hjhhhNhNubjz)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and for which }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh returns 1. If }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) is NULL, it’s considered to match all.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj9)}(h+Pointer to found devres, NULL if not found.h]h+Pointer to found devres, NULL if not found.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_get (C function) c.devres_gethNtauh1hhj hhhNhNubh)}(hhh](h)}(hYvoid * devres_get (struct device *dev, void *new_res, dr_match_t match, void *match_data)h]h)}(hWvoid *devres_get(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM/ubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOhhhjahM/ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjahM/ubh)}(h devres_geth]h)}(h devres_geth]h devres_get}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjahM/ubj )}(hG(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jsb c.devres_getasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(h void *new_resh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hnew_resh]hnew_res}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjVmodnameN classnameNjcjf)}ji]j c.devres_getasbuh1hhjMubj=)}(h h]h }(hjrhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhjahM/ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjahM/ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjahM/hjHhhubj )}(hhh]j9)}(h0Find devres, if non-existent, add one atomicallyh]h0Find devres, if non-existent, add one atomically}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahM/ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to lookup or add devres for ``void *new_res`` Pointer to new initialized devres to add if not found ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** which has the same release function as **new_res** and for which **match** return 1. If found, **new_res** is freed; otherwise, **new_res** is added atomically. **Return** Pointer to found or added devres.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjubj)}(hhh](j)}(h:``struct device *dev`` Device to lookup or add devres for h](j)}(h``struct device *dev``h]j?)}(hj-h]hstruct device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM0hj'ubj)}(hhh]j9)}(h"Device to lookup or add devres forh]h"Device to lookup or add devres for}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhM0hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM0hj$ubj)}(hH``void *new_res`` Pointer to new initialized devres to add if not found h](j)}(h``void *new_res``h]j?)}(hjfh]h void *new_res}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM1hj`ubj)}(hhh]j9)}(h5Pointer to new initialized devres to add if not foundh]h5Pointer to new initialized devres to add if not found}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{hM1hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM1hj$ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2hjubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hj$ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj$ubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM5hjubj9)}(hFind the latest devres of **dev** which has the same release function as **new_res** and for which **match** return 1. If found, **new_res** is freed; otherwise, **new_res** is added atomically.h](hFind the latest devres of }(hj)hhhNhNubjz)}(h**dev**h]hdev}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh( which has the same release function as }(hj)hhhNhNubjz)}(h **new_res**h]hnew_res}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh and for which }(hj)hhhNhNubjz)}(h **match**h]hmatch}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh return 1. If found, }(hj)hhhNhNubjz)}(h **new_res**h]hnew_res}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh is freed; otherwise, }(hj)hhhNhNubjz)}(h **new_res**h]hnew_res}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubh is added atomically.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM4hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM8hjubj9)}(h!Pointer to found or added devres.h]h!Pointer to found or added devres.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_remove (C function)c.devres_removehNtauh1hhj hhhNhNubh)}(hhh](h)}(hcvoid * devres_remove (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(havoid *devres_remove(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMRubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMRubh)}(h devres_removeh]h)}(h devres_removeh]h devres_remove}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMRubj )}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCmodnameN classnameNjcjf)}ji]jl)}j_j sbc.devres_removeasbuh1hhjubj=)}(h h]h }(hjahhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hj|hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j]c.devres_removeasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]j]c.devres_removeasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmatchh]hmatch}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj=)}(h h]h }(hj3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj!ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(h match_datah]h match_data}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMRhjhhubj )}(hhh]j9)}(h$Find a device resource and remove ith]h$Find a device resource and remove it}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhjuhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMRubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX***Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and returned. **Return** Pointer to removed devres on success, NULL if not found.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMVhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]j?)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMShjubj)}(hhh]j9)}(hDevice to find resource fromh]hDevice to find resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j?)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThjubj)}(hhh]j9)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hj+h]hdr_match_t match}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj)ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhj%ubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj@hMUhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMUhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjdh]hvoid *match_data}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjbubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMVhj^ubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjyhMVhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMXhjubj9)}(hFind the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and returned.h](hFind the latest devres of }(hjhhhNhNubjz)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh associated with }(hjhhhNhNubjz)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and for which }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh returns 1. If }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhe is NULL, it’s considered to match all. If found, the resource is removed atomically and returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMWhjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM\hjubj9)}(h8Pointer to removed devres on success, NULL if not found.h]h8Pointer to removed devres on success, NULL if not found.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_destroy (C function)c.devres_destroyhNtauh1hhj hhhNhNubh)}(hhh](h)}(haint devres_destroy (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_destroy(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuubj=)}(h h]h }(hjbhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjOhhhjahMuubh)}(hdevres_destroyh]h)}(hdevres_destroyh]hdevres_destroy}(hjthhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubah}(h]h ](jjeh"]h$]h&]jj uh1hhjOhhhjahMuubj )}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jvsbc.devres_destroyasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jc.devres_destroyasbuh1hhjubj=)}(h h]h }(hj#hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hreleaseh]hrelease}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjOmodnameN classnameNjcjf)}ji]jc.devres_destroyasbuh1hhjFubj=)}(h h]h }(hjkhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubh)}(hmatchh]hmatch}(hjyhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h match_datah]h match_data}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjOhhhjahMuubeh}(h]h ]h"]h$]h&]jj juh1hjjhjKhhhjahMuubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1hhjahMuhjHhhubj )}(hhh]j9)}(h%Find a device resource and destroy ith]h%Find a device resource and destroy it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahMuubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jj4jj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and freed. Note that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data. **Return** 0 if devres is found and freed, -ENOENT if not found.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]j?)}(hj&h]hstruct device *dev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMvhj ubj)}(hhh]j9)}(hDevice to find resource fromh]hDevice to find resource from}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;hMvhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMvhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j?)}(hj_h]hdr_release_t release}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMwhjYubj)}(hhh]j9)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjthMwhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMwhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMxhjubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhjubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubj9)}(h**Description**h]jz)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM{hjubj9)}(hFind the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and freed.h](hFind the latest devres of }(hj"hhhNhNubjz)}(h**dev**h]hdev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh associated with }(hj"hhhNhNubjz)}(h **release**h]hrelease}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh and for which }(hj"hhhNhNubjz)}(h **match**h]hmatch}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh returns 1. If }(hj"hhhNhNubjz)}(h **match**h]hmatch}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubhb is NULL, it’s considered to match all. If found, the resource is removed atomically and freed.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMzhjubj9)}(hNote that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data.h]hNote that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM~hjubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj9)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_release (C function)c.devres_releasehNtauh1hhj hhhNhNubh)}(hhh](h)}(haint devres_release (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_release(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjhhhjhMubh)}(hdevres_releaseh]h)}(hdevres_releaseh]hdevres_release}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ](jjeh"]h$]h&]jj uh1hhjhhhjhMubj )}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_jsbc.devres_releaseasbuh1hhjubj=)}(h h]h }(hjJhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hjehhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_release_t releaseh](h)}(hhh]h)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jFc.devres_releaseasbuh1hhjzubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjzubh)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hdr_match_t matchh](h)}(hhh]h)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jFc.devres_releaseasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubj&)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(h match_datah]h match_data}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjubeh}(h]h ]h"]h$]h&]jj uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1hhjhMhjhhubj )}(hhh]j9)}(h6Find a device resource and destroy it, calling releaseh]h6Find a device resource and destroy it, calling release}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jyj4jyj5j6j7uh1hhhhj hNhNubjp)}(hXN**Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed. **Return** 0 if devres is found and freed, -ENOENT if not found.h](j9)}(h**Parameters**h]jz)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]j?)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]j9)}(hDevice to find resource fromh]hDevice to find resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]j?)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]j9)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]j?)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]j9)}(hMatch function (optional)h]hMatch function (optional)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]j?)}(hjMh]hvoid *match_data}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjGubj)}(hhh]j9)}(hData for the match functionh]hData for the match function}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubj9)}(h**Description**h]jz)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}ubj9)}(hFind the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.h](hFind the latest devres of }(hjhhhNhNubjz)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh associated with }(hjhhhNhNubjz)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and for which }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh returns 1. If }(hjhhhNhNubjz)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh is NULL, it’s considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}ubj9)}(h **Return**h]jz)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}ubj9)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_open_group (C function)c.devres_open_grouphNtauh1hhj hhhNhNubh)}(hhh](h)}(hBvoid * devres_open_group (struct device *dev, void *id, gfp_t gfp)h]h)}(h@void *devres_open_group(struct device *dev, void *id, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hjKhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8hhhjJhMubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhMubh)}(hdevres_open_grouph]h)}(hdevres_open_grouph]hdevres_open_group}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfubah}(h]h ](jjeh"]h$]h&]jj uh1hhj8hhhjJhMubj )}(h)(struct device *dev, void *id, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubh)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjmodnameN classnameNjcjf)}ji]jl)}j_jlsbc.devres_open_groupasbuh1hhjubj=)}(h h]h }(hjhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubj&)}(hvoid *idh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj=)}(h h]h }(hj hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hidh]hid}(hj! hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj= hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj: ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj? modnameN classnameNjcjf)}ji]jc.devres_open_groupasbuh1hhj6 ubj=)}(h h]h }(hj[ hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6 ubh)}(hgfph]hgfp}(hji hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6 ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj~ubeh}(h]h ]h"]h$]h&]jj uh1jhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj4hhhjJhMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1hhjJhMhj1hhubj )}(hhh]j9)}(hOpen a new devres grouph]hOpen a new devres group}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j j4j j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to open devres group for ``void *id`` Separator ID ``gfp_t gfp`` Allocation flags **Description** Open a new devres group for **dev** with **id**. For **id**, using a pointer to an object which won't be used for another group is recommended. If **id** is NULL, address-wise unique ID is created. **Return** ID of the new group, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.cRhM hj ubj)}(hhh](j)}(h7``struct device *dev`` Device to open devres group for h](j)}(h``struct device *dev``h]j?)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj ubj)}(hhh]j9)}(hDevice to open devres group forh]hDevice to open devres group for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``void *id`` Separator ID h](j)}(h ``void *id``h]j?)}(hj !h]hvoid *id}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj !ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj!ubj)}(hhh]j9)}(h Separator IDh]h Separator ID}(hj&!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj"!hMhj#!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj"!hMhj ubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]j?)}(hjF!h]h gfp_t gfp}(hjH!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjD!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj@!ubj)}(hhh]j9)}(hAllocation flagsh]hAllocation flags}(hj_!hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj[!hMhj\!ubah}(h]h ]h"]h$]h&]uh1jhj@!ubeh}(h]h ]h"]h$]h&]uh1jhj[!hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj9)}(h**Description**h]jz)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM!hj ubj9)}(hOpen a new devres group for **dev** with **id**. For **id**, using a pointer to an object which won't be used for another group is recommended. If **id** is NULL, address-wise unique ID is created.h](hOpen a new devres group for }(hj!hhhNhNubjz)}(h**dev**h]hdev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh with }(hj!hhhNhNubjz)}(h**id**h]hid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh. For }(hj!hhhNhNubjz)}(h**id**h]hid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh[, using a pointer to an object which won’t be used for another group is recommended. If }(hj!hhhNhNubjz)}(h**id**h]hid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh, is NULL, address-wise unique ID is created.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj ubj9)}(h **Return**h]jz)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM$hj ubj9)}(h%ID of the new group, NULL on failure.h]h%ID of the new group, NULL on failure.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM%hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevres_close_group (C function)c.devres_close_grouphNtauh1hhj hhhNhNubh)}(hhh](h)}(h6void devres_close_group (struct device *dev, void *id)h]h)}(h5void devres_close_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hj5"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1"hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM^ubj=)}(h h]h }(hjD"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj1"hhhjC"hM^ubh)}(hdevres_close_grouph]h)}(hdevres_close_grouph]hdevres_close_group}(hjV"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR"ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj1"hhhjC"hM^ubj )}(h(struct device *dev, void *id)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjr"hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjn"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjn"ubh)}(hhh]h)}(hdeviceh]hdevice}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj"modnameN classnameNjcjf)}ji]jl)}j_jX"sbc.devres_close_groupasbuh1hhjn"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjn"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn"ubh)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjj"ubj&)}(hvoid *idh](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj=)}(h h]h }(hj"hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hidh]hid}(hj #hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjj"ubeh}(h]h ]h"]h$]h&]jj uh1jhj1"hhhjC"hM^ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj-"hhhjC"hM^ubah}(h]j("ah ](jjeh"]h$]h&]jj)jhuh1hhjC"hM^hj*"hhubj )}(hhh]j9)}(hClose a devres grouph]hClose a devres group}(hj7#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM^hj4#hhubah}(h]h ]h"]h$]h&]uh1jhj*"hhhjC"hM^ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jO#j4jO#j5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``struct device *dev`` Device to close devres group for ``void *id`` ID of target group, can be NULL **Description** Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](j9)}(h**Parameters**h]jz)}(hjY#h]h Parameters}(hj[#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW#ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMbhjS#ubj)}(hhh](j)}(h8``struct device *dev`` Device to close devres group for h](j)}(h``struct device *dev``h]j?)}(hjx#h]hstruct device *dev}(hjz#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjv#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM_hjr#ubj)}(hhh]j9)}(h Device to close devres group forh]h Device to close devres group for}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hM_hj#ubah}(h]h ]h"]h$]h&]uh1jhjr#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM_hjo#ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j?)}(hj#h]hvoid *id}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM`hj#ubj)}(hhh]j9)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj#hM`hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM`hjo#ubeh}(h]h ]h"]h$]h&]uh1jhjS#ubj9)}(h**Description**h]jz)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMbhjS#ubj9)}(h\Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](hClose the group identified by }(hj$hhhNhNubjz)}(h**id**h]hid}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh. If }(hj$hhhNhNubjz)}(h**id**h]hid}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubh, is NULL, the latest open group is selected.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMahjS#ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devres_remove_group (C function)c.devres_remove_grouphNtauh1hhj hhhNhNubh)}(hhh](h)}(h7void devres_remove_group (struct device *dev, void *id)h]h)}(h6void devres_remove_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hjU$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ$hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMwubj=)}(h h]h }(hjd$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQ$hhhjc$hMwubh)}(hdevres_remove_grouph]h)}(hdevres_remove_grouph]hdevres_remove_group}(hjv$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjr$ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjQ$hhhjc$hMwubj )}(h(struct device *dev, void *id)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj$ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubh)}(hhh]h)}(hdeviceh]hdevice}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj$modnameN classnameNjcjf)}ji]jl)}j_jx$sbc.devres_remove_groupasbuh1hhj$ubj=)}(h h]h }(hj$hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubj&)}(hvoid *idh](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj=)}(h h]h }(hj%hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj%ubj)}(hjh]h*}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hidh]hid}(hj-%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj$ubeh}(h]h ]h"]h$]h&]jj uh1jhjQ$hhhjc$hMwubeh}(h]h ]h"]h$]h&]jj juh1hjjhjM$hhhjc$hMwubah}(h]jH$ah ](jjeh"]h$]h&]jj)jhuh1hhjc$hMwhjJ$hhubj )}(hhh]j9)}(hRemove a devres grouph]hRemove a devres group}(hjW%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMwhjT%hhubah}(h]h ]h"]h$]h&]uh1jhjJ$hhhjc$hMwubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jo%j4jo%j5j6j7uh1hhhhj hNhNubjp)}(hX#**Parameters** ``struct device *dev`` Device to remove group for ``void *id`` ID of target group, can be NULL **Description** Remove the group identified by **id**. If **id** is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.h](j9)}(h**Parameters**h]jz)}(hjy%h]h Parameters}(hj{%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjw%ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM{hjs%ubj)}(hhh](j)}(h2``struct device *dev`` Device to remove group for h](j)}(h``struct device *dev``h]j?)}(hj%h]hstruct device *dev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMxhj%ubj)}(hhh]j9)}(hDevice to remove group forh]hDevice to remove group for}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMxhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMxhj%ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j?)}(hj%h]hvoid *id}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhj%ubj)}(hhh]j9)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj%hMyhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMyhj%ubeh}(h]h ]h"]h$]h&]uh1jhjs%ubj9)}(h**Description**h]jz)}(hj &h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj &ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM{hjs%ubj9)}(hRemove the group identified by **id**. If **id** is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.h](hRemove the group identified by }(hj"&hhhNhNubjz)}(h**id**h]hid}(hj*&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"&ubh. If }(hj"&hhhNhNubjz)}(h**id**h]hid}(hj<&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"&ubhn is NULL, the latest open group is selected. Note that removing a group doesn’t affect any other resources.}(hj"&hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMzhjs%ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!devres_release_group (C function)c.devres_release_grouphNtauh1hhj hhhNhNubh)}(hhh](h)}(h7int devres_release_group (struct device *dev, void *id)h]h)}(h6int devres_release_group(struct device *dev, void *id)h](j)}(hinth]hint}(hju&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq&hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjq&hhhj&hMubh)}(hdevres_release_grouph]h)}(hdevres_release_grouph]hdevres_release_group}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjq&hhhj&hMubj )}(h(struct device *dev, void *id)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj&hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubh)}(hhh]h)}(hdeviceh]hdevice}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj&modnameN classnameNjcjf)}ji]jl)}j_j&sbc.devres_release_groupasbuh1hhj&ubj=)}(h h]h }(hj&hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hdevh]hdev}(hj 'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubj&)}(hvoid *idh](j)}(hvoidh]hvoid}(hj$'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'ubj=)}(h h]h }(hj2'hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj 'ubj)}(hjh]h*}(hj@'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 'ubh)}(hidh]hid}(hjM'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 'ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj&ubeh}(h]h ]h"]h$]h&]jj uh1jhjq&hhhj&hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjm&hhhj&hMubah}(h]jh&ah ](jjeh"]h$]h&]jj)jhuh1hhj&hMhjj&hhubj )}(hhh]j9)}(h#Release resources in a devres grouph]h#Release resources in a devres group}(hjw'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt'hhubah}(h]h ]h"]h$]h&]uh1jhjj&hhhj&hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j'j4j'j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to release group for ``void *id`` ID of target group, can be NULL **Description** Release all resources in the group identified by **id**. If **id** is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed. **Return** The number of released non-group resources.h](j9)}(h**Parameters**h]jz)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj)}(hhh](j)}(h3``struct device *dev`` Device to release group for h](j)}(h``struct device *dev``h]j?)}(hj'h]hstruct device *dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj)}(hhh]j9)}(hDevice to release group forh]hDevice to release group for}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]j?)}(hj'h]hvoid *id}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj)}(hhh]j9)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubj9)}(h**Description**h]jz)}(hj,(h]h Description}(hj.(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*(ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj9)}(hRelease all resources in the group identified by **id**. If **id** is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.h](h1Release all resources in the group identified by }(hjB(hhhNhNubjz)}(h**id**h]hid}(hjJ(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB(ubh. If }(hjB(hhhNhNubjz)}(h**id**h]hid}(hj\(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB(ubh is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.}(hjB(hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj9)}(h **Return**h]jz)}(hjw(h]hReturn}(hjy(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhju(ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubj9)}(h+The number of released non-group resources.h]h+The number of released non-group resources.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__devm_add_action (C function)c.__devm_add_actionhNtauh1hhj hhhNhNubh)}(hhh](h)}(h`int __devm_add_action (struct device *dev, void (*action)(void *), void *data, const char *name)h]h)}(h^int __devm_add_action(struct device *dev, void (*action)(void*), void *data, const char *name)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj(hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(hhhj(hMubh)}(h__devm_add_actionh]h)}(h__devm_add_actionh]h__devm_add_action}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj(hhhj(hMubj )}(hI(struct device *dev, void (*action)(void*), void *data, const char *name)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj(ubj=)}(h h]h }(hj)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubh)}(hhh]h)}(hdeviceh]hdevice}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj)modnameN classnameNjcjf)}ji]jl)}j_j(sbc.__devm_add_actionasbuh1hhj(ubj=)}(h h]h }(hj7)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj(ubj)}(hjh]h*}(hjE)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hdevh]hdev}(hjR)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjk)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj=)}(h h]h }(hjy)hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjg)ubj)}(hj6h]h(}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubh)}(hactionh]haction}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjg)ubj)}(hjh]h)}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hj6h]h(}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubj)}(hjh]h)}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(h void *datah](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj=)}(h h]h }(hj *hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj)ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hdatah]hdata}(hj%*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubj&)}(hconst char *nameh](j+)}(hj<*h]hconst}(hj>*hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj:*ubj=)}(h h]h }(hjK*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:*ubj)}(hcharh]hchar}(hjY*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:*ubj=)}(h h]h }(hjg*hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:*ubj)}(hjh]h*}(hju*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:*ubh)}(hnameh]hname}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:*ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(ubeh}(h]h ]h"]h$]h&]jj uh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1hhj(hMhj(hhubj )}(hhh]j9)}(h0add a custom action to list of managed resourcesh]h0add a custom action to list of managed resources}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j*j4j*j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device that owns the action ``void (*action)(void *)`` Function that should be called ``void *data`` Pointer to data passed to **action** implementation ``const char *name`` Name of the resource (for debugging purposes) **Description** This adds a custom action to the list of managed resources so that it gets executed as part of standard resource unwinding.h](j9)}(h**Parameters**h]jz)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j?)}(hj*h]hstruct device *dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*ubj)}(hhh]j9)}(hDevice that owns the actionh]hDevice that owns the action}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj*ubj)}(h:``void (*action)(void *)`` Function that should be called h](j)}(h``void (*action)(void *)``h]j?)}(hj&+h]hvoid (*action)(void *)}(hj(+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj$+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj +ubj)}(hhh]j9)}(hFunction that should be calledh]hFunction that should be called}(hj?+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj;+hMhj<+ubah}(h]h ]h"]h$]h&]uh1jhj +ubeh}(h]h ]h"]h$]h&]uh1jhj;+hMhj*ubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j?)}(hj_+h]h void *data}(hja+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj]+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjY+ubj)}(hhh]j9)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hjx+hhhNhNubjz)}(h **action**h]haction}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx+ubh implementation}(hjx+hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hjt+hMhju+ubah}(h]h ]h"]h$]h&]uh1jhjY+ubeh}(h]h ]h"]h$]h&]uh1jhjt+hMhj*ubj)}(hC``const char *name`` Name of the resource (for debugging purposes) h](j)}(h``const char *name``h]j?)}(hj+h]hconst char *name}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj+ubj)}(hhh]j9)}(h-Name of the resource (for debugging purposes)h]h-Name of the resource (for debugging purposes)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubj9)}(h**Description**h]jz)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*ubj9)}(h{This adds a custom action to the list of managed resources so that it gets executed as part of standard resource unwinding.h]h{This adds a custom action to the list of managed resources so that it gets executed as part of standard resource unwinding.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ&devm_remove_action_nowarn (C function)c.devm_remove_action_nowarnhNtauh1hhj hhhNhNubh)}(hhh](h)}(hVint devm_remove_action_nowarn (struct device *dev, void (*action)(void *), void *data)h]h)}(hTint devm_remove_action_nowarn(struct device *dev, void (*action)(void*), void *data)h](j)}(hinth]hint}(hj*,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&,hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj9,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj&,hhhj8,hMubh)}(hdevm_remove_action_nowarnh]h)}(hdevm_remove_action_nowarnh]hdevm_remove_action_nowarn}(hjK,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG,ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj&,hhhj8,hMubj )}(h7(struct device *dev, void (*action)(void*), void *data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjg,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjc,ubj=)}(h h]h }(hjt,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjc,ubh)}(hhh]h)}(hdeviceh]hdevice}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj,modnameN classnameNjcjf)}ji]jl)}j_jM,sbc.devm_remove_action_nowarnasbuh1hhjc,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjc,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc,ubh)}(hdevh]hdev}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjc,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj_,ubj&)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj=)}(h h]h }(hj,hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,ubj)}(hj6h]h(}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hactionh]haction}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubj)}(hjh]h)}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hj6h]h(}(hj*-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hvoidh]hvoid}(hj7-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjE-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h)}(hjR-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj_,ubj&)}(h void *datah](j)}(hvoidh]hvoid}(hjj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf-ubj=)}(h h]h }(hjx-hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjf-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf-ubh)}(hdatah]hdata}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjf-ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj_,ubeh}(h]h ]h"]h$]h&]jj uh1jhj&,hhhj8,hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj",hhhj8,hMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1hhj8,hMhj,hhubj )}(hhh]j9)}(h&removes previously added custom actionh]h&removes previously added custom action}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj8,hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j-j4j-j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device that owns the action ``void (*action)(void *)`` Function implementing the action ``void *data`` Pointer to data passed to **action** implementation **Description** Removes instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries. In contrast to devm_remove_action(), this function does not WARN() if no entry could have been found. This should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction. Causing the warning from regular driver code most likely indicates an abuse of the devres API. **Return** 0 on success, -ENOENT if no entry could have been found.h](j9)}(h**Parameters**h]jz)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj-ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j?)}(hj-h]hstruct device *dev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-ubj)}(hhh]j9)}(hDevice that owns the actionh]hDevice that owns the action}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj-ubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]j?)}(hj7.h]hvoid (*action)(void *)}(hj9.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj5.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj1.ubj)}(hhh]j9)}(h Function implementing the actionh]h Function implementing the action}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjL.hMhjM.ubah}(h]h ]h"]h$]h&]uh1jhj1.ubeh}(h]h ]h"]h$]h&]uh1jhjL.hMhj-ubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j?)}(hjp.h]h void *data}(hjr.hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjn.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjj.ubj)}(hhh]j9)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hj.hhhNhNubjz)}(h **action**h]haction}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh implementation}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj.hM hj.ubah}(h]h ]h"]h$]h&]uh1jhjj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubj9)}(h**Description**h]jz)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj-ubj9)}(hRemoves instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries.h](hRemoves instance of }(hj.hhhNhNubjz)}(h **action**h]haction}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj-ubj9)}(heIn contrast to devm_remove_action(), this function does not WARN() if no entry could have been found.h]heIn contrast to devm_remove_action(), this function does not WARN() if no entry could have been found.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj-ubj9)}(hThis should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction.h]hThis should only be used if the action is contained in an object with independent lifetime management, e.g. the Devres rust abstraction.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-ubj9)}(h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.h]h^Causing the warning from regular driver code most likely indicates an abuse of the devres API.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-ubj9)}(h **Return**h]jz)}(hj#/h]hReturn}(hj%/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!/ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-ubj9)}(h80 on success, -ENOENT if no entry could have been found.h]h80 on success, -ENOENT if no entry could have been found.}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_release_action (C function)c.devm_release_actionhNtauh1hhj hhhNhNubh)}(hhh](h)}(hQvoid devm_release_action (struct device *dev, void (*action)(void *), void *data)h]h)}(hOvoid devm_release_action(struct device *dev, void (*action)(void*), void *data)h](j)}(hvoidh]hvoid}(hjh/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM(ubj=)}(h h]h }(hjw/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjd/hhhjv/hM(ubh)}(hdevm_release_actionh]h)}(hdevm_release_actionh]hdevm_release_action}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjd/hhhjv/hM(ubj )}(h7(struct device *dev, void (*action)(void*), void *data)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj/ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubh)}(hhh]h)}(hdeviceh]hdevice}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj/modnameN classnameNjcjf)}ji]jl)}j_j/sbc.devm_release_actionasbuh1hhj/ubj=)}(h h]h }(hj/hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj=)}(h h]h }(hj%0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0ubj)}(hj6h]h(}(hj30hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj@0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hactionh]haction}(hjM0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubj)}(hjh]h)}(hj[0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hj6h]h(}(hjh0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hvoidh]hvoid}(hju0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h)}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubj&)}(h void *datah](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj=)}(h h]h }(hj0hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hdatah]hdata}(hj0hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj/ubeh}(h]h ]h"]h$]h&]jj uh1jhjd/hhhjv/hM(ubeh}(h]h ]h"]h$]h&]jj juh1hjjhj`/hhhjv/hM(ubah}(h]j[/ah ](jjeh"]h$]h&]jj)jhuh1hhjv/hM(hj]/hhubj )}(hhh]j9)}(h&release previously added custom actionh]h&release previously added custom action}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM(hj0hhubah}(h]h ]h"]h$]h&]uh1jhj]/hhhjv/hM(ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j1j4j1j5j6j7uh1hhhhj hNhNubjp)}(hXn**Parameters** ``struct device *dev`` Device that owns the action ``void (*action)(void *)`` Function implementing the action ``void *data`` Pointer to data passed to **action** implementation **Description** Releases and removes instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries.h](j9)}(h**Parameters**h]jz)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,hj1ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action h](j)}(h``struct device *dev``h]j?)}(hj<1h]hstruct device *dev}(hj>1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM)hj61ubj)}(hhh]j9)}(hDevice that owns the actionh]hDevice that owns the action}(hjU1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQ1hM)hjR1ubah}(h]h ]h"]h$]h&]uh1jhj61ubeh}(h]h ]h"]h$]h&]uh1jhjQ1hM)hj31ubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]j?)}(hju1h]hvoid (*action)(void *)}(hjw1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjs1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM*hjo1ubj)}(hhh]j9)}(h Function implementing the actionh]h Function implementing the action}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj1hM*hj1ubah}(h]h ]h"]h$]h&]uh1jhjo1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM*hj31ubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]j?)}(hj1h]h void *data}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM+hj1ubj)}(hhh]j9)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hj1hhhNhNubjz)}(h **action**h]haction}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubh implementation}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hj1hM+hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM+hj31ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj9)}(h**Description**h]jz)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM-hj1ubj9)}(hReleases and removes instance of **action** previously added by devm_add_action(). Both action and data should match one of the existing entries.h](h!Releases and removes instance of }(hj2hhhNhNubjz)}(h **action**h]haction}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubhg previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kmalloc (C function)c.devm_kmallochNtauh1hhj hhhNhNubh)}(hhh](h)}(h@void * devm_kmalloc (struct device *dev, size_t size, gfp_t gfp)h]h)}(h>void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjR2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN2hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLubj=)}(h h]h }(hja2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjN2hhhj`2hMLubj)}(hjh]h*}(hjo2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN2hhhj`2hMLubh)}(h devm_kmalloch]h)}(h devm_kmalloch]h devm_kmalloc}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|2ubah}(h]h ](jjeh"]h$]h&]jj uh1hhjN2hhhj`2hMLubj )}(h,(struct device *dev, size_t size, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubh)}(hhh]h)}(hdeviceh]hdevice}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj2modnameN classnameNjcjf)}ji]jl)}j_j2sbc.devm_kmallocasbuh1hhj2ubj=)}(h h]h }(hj2hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubj&)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj3modnameN classnameNjcjf)}ji]j2c.devm_kmallocasbuh1hhj 3ubj=)}(h h]h }(hj/3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj 3ubh)}(hsizeh]hsize}(hj=3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjY3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjV3ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj[3modnameN classnameNjcjf)}ji]j2c.devm_kmallocasbuh1hhjR3ubj=)}(h h]h }(hjw3hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjR3ubh)}(hgfph]hgfp}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjR3ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj2ubeh}(h]h ]h"]h$]h&]jj uh1jhjN2hhhj`2hMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhjJ2hhhj`2hMLubah}(h]jE2ah ](jjeh"]h$]h&]jj)jhuh1hhj`2hMLhjG2hhubj )}(hhh]j9)}(hResource-managed kmalloch]hResource-managed kmalloc}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLhj3hhubah}(h]h ]h"]h$]h&]uh1jhjG2hhhj`2hMLubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j3j4j3j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to allocate memory for ``size_t size`` Allocation size ``gfp_t gfp`` Allocation gfp flags **Description** Managed kmalloc. Memory allocated with this function is automatically freed on driver detach. Like all other devres resources, guaranteed alignment is unsigned long long. **Return** Pointer to allocated memory on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhj3ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j?)}(hj3h]hstruct device *dev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMMhj3ubj)}(hhh]j9)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj4hMMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMMhj3ubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]j?)}(hj)4h]h size_t size}(hj+4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj'4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNhj#4ubj)}(hhh]j9)}(hAllocation sizeh]hAllocation size}(hjB4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj>4hMNhj?4ubah}(h]h ]h"]h$]h&]uh1jhj#4ubeh}(h]h ]h"]h$]h&]uh1jhj>4hMNhj3ubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]j?)}(hjb4h]h gfp_t gfp}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj`4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMOhj\4ubj)}(hhh]j9)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj{4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjw4hMOhjx4ubah}(h]h ]h"]h$]h&]uh1jhj\4ubeh}(h]h ]h"]h$]h&]uh1jhjw4hMOhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj9)}(h**Description**h]jz)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhj3ubj9)}(hManaged kmalloc. Memory allocated with this function is automatically freed on driver detach. Like all other devres resources, guaranteed alignment is unsigned long long.h]hManaged kmalloc. Memory allocated with this function is automatically freed on driver detach. Like all other devres resources, guaranteed alignment is unsigned long long.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhj3ubj9)}(h **Return**h]jz)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThj3ubj9)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_krealloc (C function)c.devm_kreallochNtauh1hhj hhhNhNubh)}(hhh](h)}(hPvoid * devm_krealloc (struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h]h)}(hNvoid *devm_krealloc(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMoubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5hhhj5hMoubj)}(hjh]h*}(hj&5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMoubh)}(h devm_krealloch]h)}(h devm_krealloch]h devm_krealloc}(hj75hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj35ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5hhhj5hMoubj )}(h;(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjS5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjO5ubj=)}(h h]h }(hj`5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjO5ubh)}(hhh]h)}(hdeviceh]hdevice}(hjq5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn5ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjs5modnameN classnameNjcjf)}ji]jl)}j_j95sbc.devm_kreallocasbuh1hhjO5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjO5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO5ubh)}(hdevh]hdev}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjK5ubj&)}(h void *ptrh](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj=)}(h h]h }(hj5hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hptrh]hptr}(hj5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjK5ubj&)}(hsize_t new_sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj 6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj 6modnameN classnameNjcjf)}ji]j5c.devm_kreallocasbuh1hhj6ubj=)}(h h]h }(hj(6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj6ubh)}(hnew_sizeh]hnew_size}(hj66hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjK5ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjR6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjO6ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjT6modnameN classnameNjcjf)}ji]j5c.devm_kreallocasbuh1hhjK6ubj=)}(h h]h }(hjp6hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjK6ubh)}(hgfph]hgfp}(hj~6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK6ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjK5ubeh}(h]h ]h"]h$]h&]jj uh1jhj5hhhj5hMoubeh}(h]h ]h"]h$]h&]jj juh1hjjhj5hhhj5hMoubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1hhj5hMohj4hhubj )}(hhh]j9)}(hResource-managed krealloc()h]hResource-managed krealloc()}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMohj6hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj5hMoubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j6j4j6j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to re-allocate memory for ``void *ptr`` Pointer to the memory chunk to re-allocate ``size_t new_size`` New allocation size ``gfp_t gfp`` Allocation gfp flags **Description** Managed krealloc(). Resizes the memory chunk allocated with devm_kmalloc(). Behaves similarly to regular krealloc(): if **ptr** is NULL or ZERO_SIZE_PTR, it's the equivalent of devm_kmalloc(). If new_size is zero, it frees the previously allocated memory and returns ZERO_SIZE_PTR. This function doesn't change the order in which the release callback for the re-alloc'ed devres will be called (except when falling back to devm_kmalloc() or when freeing resources when new_size is zero). The contents of the memory are preserved up to the lesser of new and old sizes.h](j9)}(h**Parameters**h]jz)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMshj6ubj)}(hhh](j)}(h8``struct device *dev`` Device to re-allocate memory for h](j)}(h``struct device *dev``h]j?)}(hj6h]hstruct device *dev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMphj6ubj)}(hhh]j9)}(h Device to re-allocate memory forh]h Device to re-allocate memory for}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj6hMphj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMphj6ubj)}(h9``void *ptr`` Pointer to the memory chunk to re-allocate h](j)}(h ``void *ptr``h]j?)}(hj"7h]h void *ptr}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj 7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMqhj7ubj)}(hhh]j9)}(h*Pointer to the memory chunk to re-allocateh]h*Pointer to the memory chunk to re-allocate}(hj;7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj77hMqhj87ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj77hMqhj6ubj)}(h(``size_t new_size`` New allocation size h](j)}(h``size_t new_size``h]j?)}(hj[7h]hsize_t new_size}(hj]7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.cahMrhjU7ubj)}(hhh]j9)}(hNew allocation sizeh]hNew allocation size}(hjt7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjp7hMrhjq7ubah}(h]h ]h"]h$]h&]uh1jhjU7ubeh}(h]h ]h"]h$]h&]uh1jhjp7hMrhj6ubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]j?)}(hj7h]h gfp_t gfp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMshj7ubj)}(hhh]j9)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7hMshj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMshj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubj9)}(h**Description**h]jz)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuhj6ubj9)}(hX6Managed krealloc(). Resizes the memory chunk allocated with devm_kmalloc(). Behaves similarly to regular krealloc(): if **ptr** is NULL or ZERO_SIZE_PTR, it's the equivalent of devm_kmalloc(). If new_size is zero, it frees the previously allocated memory and returns ZERO_SIZE_PTR. This function doesn't change the order in which the release callback for the re-alloc'ed devres will be called (except when falling back to devm_kmalloc() or when freeing resources when new_size is zero). The contents of the memory are preserved up to the lesser of new and old sizes.h](hxManaged krealloc(). Resizes the memory chunk allocated with devm_kmalloc(). Behaves similarly to regular krealloc(): if }(hj7hhhNhNubjz)}(h**ptr**h]hptr}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubhX is NULL or ZERO_SIZE_PTR, it’s the equivalent of devm_kmalloc(). If new_size is zero, it frees the previously allocated memory and returns ZERO_SIZE_PTR. This function doesn’t change the order in which the release callback for the re-alloc’ed devres will be called (except when falling back to devm_kmalloc() or when freeing resources when new_size is zero). The contents of the memory are preserved up to the lesser of new and old sizes.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMthj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kstrdup (C function)c.devm_kstrduphNtauh1hhj hhhNhNubh)}(hhh](h)}(hBchar * devm_kstrdup (struct device *dev, const char *s, gfp_t gfp)h]h)}(h@char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp)h](j)}(hcharh]hchar}(hj&8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"8hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj58hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj"8hhhj48hMubj)}(hjh]h*}(hjC8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"8hhhj48hMubh)}(h devm_kstrduph]h)}(h devm_kstrduph]h devm_kstrdup}(hjT8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjP8ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj"8hhhj48hMubj )}(h.(struct device *dev, const char *s, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjp8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjl8ubj=)}(h h]h }(hj}8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjl8ubh)}(hhh]h)}(hdeviceh]hdevice}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj8modnameN classnameNjcjf)}ji]jl)}j_jV8sbc.devm_kstrdupasbuh1hhjl8ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjl8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl8ubh)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjl8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjh8ubj&)}(h const char *sh](j+)}(hj<*h]hconst}(hj8hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj8ubj=)}(h h]h }(hj8hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hcharh]hchar}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj=)}(h h]h }(hj 9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj8ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hsh]hs}(hj&9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjh8ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjB9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?9ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjD9modnameN classnameNjcjf)}ji]j8c.devm_kstrdupasbuh1hhj;9ubj=)}(h h]h }(hj`9hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;9ubh)}(hgfph]hgfp}(hjn9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;9ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjh8ubeh}(h]h ]h"]h$]h&]jj uh1jhj"8hhhj48hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj8hhhj48hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1hhj48hMhj8hhubj )}(hhh]j9)}(hFAllocate resource managed space and copy an existing string into that.h]hFAllocate resource managed space and copy an existing string into that.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj48hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j9j4j9j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to allocate memory for ``const char *s`` the string to duplicate ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory **Return** Pointer to allocated string on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j?)}(hj9h]hstruct device *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9ubj)}(hhh]j9)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]j?)}(hj:h]h const char *s}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj :ubj)}(hhh]j9)}(hthe string to duplicateh]hthe string to duplicate}(hj+:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj':hMhj(:ubah}(h]h ]h"]h$]h&]uh1jhj :ubeh}(h]h ]h"]h$]h&]uh1jhj':hMhj9ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]j?)}(hjK:h]h gfp_t gfp}(hjM:hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjI:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjE:ubj)}(hhh]j9)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hjd:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhja:ubah}(h]h ]h"]h$]h&]uh1jhjE:ubeh}(h]h ]h"]h$]h&]uh1jhj`:hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubj9)}(h **Return**h]jz)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9ubj9)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kstrdup_const (C function)c.devm_kstrdup_consthNtauh1hhj hhhNhNubh)}(hhh](h)}(hNconst char * devm_kstrdup_const (struct device *dev, const char *s, gfp_t gfp)h]h)}(hLconst char *devm_kstrdup_const(struct device *dev, const char *s, gfp_t gfp)h](j+)}(hj<*h]hconst}(hj:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj:hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:hhhj:hMubj)}(hcharh]hchar}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubj=)}(h h]h }(hj:hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj:hhhj:hMubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubh)}(hdevm_kstrdup_consth]h)}(hdevm_kstrdup_consth]hdevm_kstrdup_const}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj:hhhj:hMubj )}(h.(struct device *dev, const char *s, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj1;hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj-;ubj=)}(h h]h }(hj>;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-;ubh)}(hhh]h)}(hdeviceh]hdevice}(hjO;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjL;ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQ;modnameN classnameNjcjf)}ji]jl)}j_j;sbc.devm_kstrdup_constasbuh1hhj-;ubj=)}(h h]h }(hjo;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj-;ubj)}(hjh]h*}(hj};hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-;ubh)}(hdevh]hdev}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj);ubj&)}(h const char *sh](j+)}(hj<*h]hconst}(hj;hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj;ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubj)}(hcharh]hchar}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj=)}(h h]h }(hj;hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hj(9h]hs}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj);ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj<modnameN classnameNjcjf)}ji]jk;c.devm_kstrdup_constasbuh1hhj;ubj=)}(h h]h }(hj <hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj;ubh)}(hgfph]hgfp}(hj.<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj);ubeh}(h]h ]h"]h$]h&]jj uh1jhj:hhhj:hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj:hhhj:hMubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1hhj:hMhj:hhubj )}(hhh]j9)}(h/resource managed conditional string duplicationh]h/resource managed conditional string duplication}(hjX<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjU<hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jp<j4jp<j5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` device for which to duplicate the string ``const char *s`` the string to duplicate ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Description** Strings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached. **Return** Source string if it is in .rodata section otherwise it falls back to devm_kstrdup.h](j9)}(h**Parameters**h]jz)}(hjz<h]h Parameters}(hj|<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx<ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt<ubj)}(hhh](j)}(h@``struct device *dev`` device for which to duplicate the string h](j)}(h``struct device *dev``h]j?)}(hj<h]hstruct device *dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj<ubj)}(hhh]j9)}(h(device for which to duplicate the stringh]h(device for which to duplicate the string}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]j?)}(hj<h]h const char *s}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj<ubj)}(hhh]j9)}(hthe string to duplicateh]hthe string to duplicate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubj)}(hM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]j?)}(hj =h]h gfp_t gfp}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj =ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj=ubj)}(hhh]j9)}(h>the GFP mask used in the kmalloc() call when allocating memoryh]h>the GFP mask used in the kmalloc() call when allocating memory}(hj$=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj =hMhj!=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj =hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhjt<ubj9)}(h**Description**h]jz)}(hjF=h]h Description}(hjH=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD=ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt<ubj9)}(hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.h]hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.}(hj\=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt<ubj9)}(h **Return**h]jz)}(hjm=h]hReturn}(hjo=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjk=ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt<ubj9)}(hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.h]hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjt<ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kvasprintf (C function)c.devm_kvasprintfhNtauh1hhj hhhNhNubh)}(hhh](h)}(hSchar * devm_kvasprintf (struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h]h)}(hQchar *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j)}(hcharh]hchar}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj=hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=hhhj=hMubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj=hMubh)}(hdevm_kvasprintfh]h)}(hdevm_kvasprintfh]hdevm_kvasprintf}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubah}(h]h ](jjeh"]h$]h&]jj uh1hhj=hhhj=hMubj )}(h<(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj=ubj=)}(h h]h }(hj >hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubh)}(hhh]h)}(hdeviceh]hdevice}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj>modnameN classnameNjcjf)}ji]jl)}j_j=sbc.devm_kvasprintfasbuh1hhj=ubj=)}(h h]h }(hj:>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj=ubj)}(hjh]h*}(hjH>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hdevh]hdev}(hjU>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjq>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjn>ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjs>modnameN classnameNjcjf)}ji]j6>c.devm_kvasprintfasbuh1hhjj>ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjj>ubh)}(hgfph]hgfp}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hj>hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj>ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubj)}(hcharh]hchar}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj=)}(h h]h }(hj>hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hfmth]hfmt}(hj>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubj&)}(h va_list aph](h)}(hhh]h)}(hva_listh]hva_list}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj?modnameN classnameNjcjf)}ji]j6>c.devm_kvasprintfasbuh1hhj?ubj=)}(h h]h }(hj4?hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj?ubh)}(haph]hap}(hjB?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj=ubeh}(h]h ]h"]h$]h&]jj uh1jhj=hhhj=hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj=hhhj=hMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1hhj=hMhj=hhubj )}(hhh]j9)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hjl?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhji?hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj=hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j?j4j?j5j6j7uh1hhhhj hNhNubjp)}(hXM**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory ``const char *fmt`` The printf()-style format string ``va_list ap`` Arguments for the format string **Return** Pointer to allocated string on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j?)}(hj?h]hstruct device *dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubj)}(hhh]j9)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]j?)}(hj?h]h gfp_t gfp}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubj)}(hhh]j9)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]j?)}(hj @h]hconst char *fmt}(hj"@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj@ubj)}(hhh]j9)}(h The printf()-style format stringh]h The printf()-style format string}(hj9@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj5@hMhj6@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj5@hMhj?ubj)}(h/``va_list ap`` Arguments for the format string h](j)}(h``va_list ap``h]j?)}(hjY@h]h va_list ap}(hj[@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjW@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjS@ubj)}(hhh]j9)}(hArguments for the format stringh]hArguments for the format string}(hjr@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjn@hMhjo@ubah}(h]h ]h"]h$]h&]uh1jhjS@ubeh}(h]h ]h"]h$]h&]uh1jhjn@hMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj9)}(h **Return**h]jz)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubj9)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kasprintf (C function)c.devm_kasprintfhNtauh1hhj hhhNhNubh)}(hhh](h)}(hKchar * devm_kasprintf (struct device *dev, gfp_t gfp, const char *fmt, ...)h]h)}(hIchar *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j)}(hcharh]hchar}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj@hhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj@hhhj@hMubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj@hMubh)}(hdevm_kasprintfh]h)}(hdevm_kasprintfh]hdevm_kasprintf}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ](jjeh"]h$]h&]jj uh1hhj@hhhj@hMubj )}(h5(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj#AhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAubj=)}(h h]h }(hj0AhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(hhh]h)}(hdeviceh]hdevice}(hjAAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>Aubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjCAmodnameN classnameNjcjf)}ji]jl)}j_j Asbc.devm_kasprintfasbuh1hhjAubj=)}(h h]h }(hjaAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hjh]h*}(hjoAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hdevh]hdev}(hj|AhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjAmodnameN classnameNjcjf)}ji]j]Ac.devm_kasprintfasbuh1hhjAubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubh)}(hgfph]hgfp}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubj&)}(hconst char *fmth](j+)}(hj<*h]hconst}(hjAhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjAubj=)}(h h]h }(hjAhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hcharh]hchar}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj=)}(h h]h }(hjBhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjAubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hfmth]hfmt}(hj!BhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubj&)}(h...h]j)}(hjh]h...}(hj:BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Bubah}(h]h ]h"]h$]h&]noemphjj uh1j%hjAubeh}(h]h ]h"]h$]h&]jj uh1jhj@hhhj@hMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj@hhhj@hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1hhj@hMhj@hhubj )}(hhh]j9)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hjcBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj`Bhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3j{Bj4j{Bj5j6j7uh1hhhhj hNhNubjp)}(hXF**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory ``const char *fmt`` The printf()-style format string ``...`` Arguments for the format string **Return** Pointer to allocated string on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjBubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j?)}(hjBh]hstruct device *dev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjBubj)}(hhh]j9)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]j?)}(hjBh]h gfp_t gfp}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjBubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjBubj)}(hhh]j9)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]j?)}(hjCh]hconst char *fmt}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjCubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM!hjCubj)}(hhh]j9)}(h The printf()-style format stringh]h The printf()-style format string}(hj0ChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj,ChM!hj-Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj,ChM!hjBubj)}(h(``...`` Arguments for the format string h](j)}(h``...``h]j?)}(hjPCh]h...}(hjRChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNCubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM"hjJCubj)}(hhh]j9)}(hArguments for the format stringh]hArguments for the format string}(hjiChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjeChM"hjfCubah}(h]h ]h"]h$]h&]uh1jhjJCubeh}(h]h ]h"]h$]h&]uh1jhjeChM"hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubj9)}(h **Return**h]jz)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM$hjBubj9)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM#hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kfree (C function) c.devm_kfreehNtauh1hhj hhhNhNubh)}(hhh](h)}(h3void devm_kfree (struct device *dev, const void *p)h]h)}(h2void devm_kfree(struct device *dev, const void *p)h](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM4ubj=)}(h h]h }(hjChhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjChhhjChM4ubh)}(h devm_kfreeh]h)}(h devm_kfreeh]h devm_kfree}(hjChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCubah}(h]h ](jjeh"]h$]h&]jj uh1hhjChhhjChM4ubj )}(h#(struct device *dev, const void *p)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj DhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj Dubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj Dubh)}(hhh]h)}(hdeviceh]hdevice}(hj+DhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Dubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj-DmodnameN classnameNjcjf)}ji]jl)}j_jCsb c.devm_kfreeasbuh1hhj Dubj=)}(h h]h }(hjKDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj Dubj)}(hjh]h*}(hjYDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Dubh)}(hdevh]hdev}(hjfDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjDubj&)}(h const void *ph](j+)}(hj<*h]hconst}(hjDhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj{Dubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{Dubj)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Dubj=)}(h h]h }(hjDhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj{Dubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Dubh)}(hjh]hp}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{Dubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjDubeh}(h]h ]h"]h$]h&]jj uh1jhjChhhjChM4ubeh}(h]h ]h"]h$]h&]jj juh1hjjhjChhhjChM4ubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1hhjChM4hjChhubj )}(hhh]j9)}(hResource-managed kfreeh]hResource-managed kfree}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM4hjDhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChM4ubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jEj4jEj5j6j7uh1hhhhj hNhNubjp)}(h**Parameters** ``struct device *dev`` Device this memory belongs to ``const void *p`` Memory to free **Description** Free memory allocated with devm_kmalloc().h](j9)}(h**Parameters**h]jz)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Eubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM8hjEubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]j?)}(hj-Eh]hstruct device *dev}(hj/EhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj+Eubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM5hj'Eubj)}(hhh]j9)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjFEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjBEhM5hjCEubah}(h]h ]h"]h$]h&]uh1jhj'Eubeh}(h]h ]h"]h$]h&]uh1jhjBEhM5hj$Eubj)}(h!``const void *p`` Memory to free h](j)}(h``const void *p``h]j?)}(hjfEh]h const void *p}(hjhEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjdEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM6hj`Eubj)}(hhh]j9)}(hMemory to freeh]hMemory to free}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj{EhM6hj|Eubah}(h]h ]h"]h$]h&]uh1jhj`Eubeh}(h]h ]h"]h$]h&]uh1jhj{EhM6hj$Eubeh}(h]h ]h"]h$]h&]uh1jhjEubj9)}(h**Description**h]jz)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM8hjEubj9)}(h*Free memory allocated with devm_kmalloc().h]h*Free memory allocated with devm_kmalloc().}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM7hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kmemdup (C function)c.devm_kmemduphNtauh1hhj hhhNhNubh)}(hhh](h)}(hPvoid * devm_kmemdup (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hNvoid *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLubj=)}(h h]h }(hjEhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjEhhhjEhMLubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhMLubh)}(h devm_kmemduph]h)}(h devm_kmemduph]h devm_kmemdup}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ](jjeh"]h$]h&]jj uh1hhjEhhhjEhMLubj )}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hj0FhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hj,Fubj=)}(h h]h }(hj=FhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,Fubh)}(hhh]h)}(hdeviceh]hdevice}(hjNFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjPFmodnameN classnameNjcjf)}ji]jl)}j_jFsbc.devm_kmemdupasbuh1hhj,Fubj=)}(h h]h }(hjnFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj,Fubj)}(hjh]h*}(hj|FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Fubh)}(hdevh]hdev}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,Fubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(Fubj&)}(hconst void *srch](j+)}(hj<*h]hconst}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjFubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubj)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj=)}(h h]h }(hjFhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hsrch]hsrc}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(Fubj&)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjGmodnameN classnameNjcjf)}ji]jjFc.devm_kmemdupasbuh1hhjFubj=)}(h h]h }(hj GhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjFubh)}(hlenh]hlen}(hj.GhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(Fubj&)}(h gfp_t gfph](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjJGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGGubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjLGmodnameN classnameNjcjf)}ji]jjFc.devm_kmemdupasbuh1hhjCGubj=)}(h h]h }(hjhGhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjCGubh)}(hgfph]hgfp}(hjvGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjCGubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hj(Fubeh}(h]h ]h"]h$]h&]jj uh1jhjEhhhjEhMLubeh}(h]h ]h"]h$]h&]jj juh1hjjhjEhhhjEhMLubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1hhjEhMLhjEhhubj )}(hhh]j9)}(hResource-managed kmemduph]hResource-managed kmemdup}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLhjGhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMLubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jGj4jGj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device this memory belongs to ``const void *src`` Memory region to duplicate ``size_t len`` Memory region length ``gfp_t gfp`` GFP mask to use **Description** Duplicate region of a memory using resource managed kmalloch](j9)}(h**Parameters**h]jz)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjGubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]j?)}(hjGh]hstruct device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMMhjGubj)}(hhh]j9)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjGhMMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMMhjGubj)}(h/``const void *src`` Memory region to duplicate h](j)}(h``const void *src``h]j?)}(hjHh]hconst void *src}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNhjHubj)}(hhh]j9)}(hMemory region to duplicateh]hMemory region to duplicate}(hj3HhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj/HhMNhj0Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj/HhMNhjGubj)}(h$``size_t len`` Memory region length h](j)}(h``size_t len``h]j?)}(hjSHh]h size_t len}(hjUHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjQHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMOhjMHubj)}(hhh]j9)}(hMemory region lengthh]hMemory region length}(hjlHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjhHhMOhjiHubah}(h]h ]h"]h$]h&]uh1jhjMHubeh}(h]h ]h"]h$]h&]uh1jhjhHhMOhjGubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]j?)}(hjHh]h gfp_t gfp}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjHubj)}(hhh]j9)}(hGFP mask to useh]hGFP mask to use}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjHhMPhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMPhjGubeh}(h]h ]h"]h$]h&]uh1jhjGubj9)}(h**Description**h]jz)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhjGubj9)}(h;Duplicate region of a memory using resource managed kmalloch]h;Duplicate region of a memory using resource managed kmalloc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_kmemdup_const (C function)c.devm_kmemdup_consthNtauh1hhj hhhNhNubh)}(hhh](h)}(h\const void * devm_kmemdup_const (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hZconst void *devm_kmemdup_const(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j+)}(hj<*h]hconst}(hj IhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjIhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMaubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhjIhMaubj)}(hvoidh]hvoid}(hj(IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMaubj=)}(h h]h }(hj6IhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIhhhjIhMaubj)}(hjh]h*}(hjDIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMaubh)}(hdevm_kmemdup_consth]h)}(hdevm_kmemdup_consth]hdevm_kmemdup_const}(hjUIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQIubah}(h]h ](jjeh"]h$]h&]jj uh1hhjIhhhjIhMaubj )}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjqIhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjmIubj=)}(h h]h }(hj~IhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmIubh)}(hhh]h)}(hdeviceh]hdevice}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjImodnameN classnameNjcjf)}ji]jl)}j_jWIsbc.devm_kmemdup_constasbuh1hhjmIubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjmIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmIubh)}(hdevh]hdev}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjmIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiIubj&)}(hconst void *srch](j+)}(hj<*h]hconst}(hjIhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjIubj=)}(h h]h }(hjIhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubj)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj=)}(h h]h }(hj JhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjIubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hsrch]hsrc}(hj'JhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjiIubj&)}(h size_t lenh](h)}(hhh]h)}(hsize_th]hsize_t}(hjCJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@Jubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjEJmodnameN classnameNjcjf)}ji]jIc.devm_kmemdup_constasbuh1hhj**Parameters** ``struct device *dev`` Device this memory belongs to ``const void *src`` memory region to duplicate ``size_t len`` memory region length, ``gfp_t gfp`` GFP mask to use **Return** source address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.h](j9)}(h**Parameters**h]jz)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMehjJubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]j?)}(hj"Kh]hstruct device *dev}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Kubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMchjKubj)}(hhh]j9)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj;KhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7KhMchj8Kubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj7KhMchjKubj)}(h/``const void *src`` memory region to duplicate h](j)}(h``const void *src``h]j?)}(hj[Kh]hconst void *src}(hj]KhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMdhjUKubj)}(hhh]j9)}(hmemory region to duplicateh]hmemory region to duplicate}(hjtKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpKhMdhjqKubah}(h]h ]h"]h$]h&]uh1jhjUKubeh}(h]h ]h"]h$]h&]uh1jhjpKhMdhjKubj)}(h%``size_t len`` memory region length, h](j)}(h``size_t len``h]j?)}(hjKh]h size_t len}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMehjKubj)}(hhh]j9)}(hmemory region length,h]hmemory region length,}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMehjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMehjKubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]j?)}(hjKh]h gfp_t gfp}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMfhjKubj)}(hhh]j9)}(hGFP mask to useh]hGFP mask to use}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjKhMfhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMfhjKubeh}(h]h ]h"]h$]h&]uh1jhjJubj9)}(h **Return**h]jz)}(hjLh]hReturn}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhhjJubj9)}(hosource address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.h]hosource address if it is in .rodata or the return value of kmemdup() to which the function falls back otherwise.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ devm_get_free_pages (C function)c.devm_get_free_pageshNtauh1hhj hhhNhNubh)}(hhh](h)}(hZunsigned long devm_get_free_pages (struct device *dev, gfp_t gfp_mask, unsigned int order)h]h)}(hYunsigned long devm_get_free_pages(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j)}(hunsignedh]hunsigned}(hjMLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjILhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hj\LhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjILhhhj[LhMubj)}(hlongh]hlong}(hjjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjILhhhj[LhMubj=)}(h h]h }(hjxLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjILhhhj[LhMubh)}(hdevm_get_free_pagesh]h)}(hdevm_get_free_pagesh]hdevm_get_free_pages}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ](jjeh"]h$]h&]jj uh1hhjILhhhj[LhMubj )}(h8(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjLhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjLubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubh)}(hhh]h)}(hdeviceh]hdevice}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjLmodnameN classnameNjcjf)}ji]jl)}j_jLsbc.devm_get_free_pagesasbuh1hhjLubj=)}(h h]h }(hjLhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hdevh]hdev}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(hgfp_t gfp_maskh](h)}(hhh]h)}(hgfp_th]hgfp_t}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjMmodnameN classnameNjcjf)}ji]jLc.devm_get_free_pagesasbuh1hhjMubj=)}(h h]h }(hj9MhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjMubh)}(hgfp_maskh]hgfp_mask}(hjGMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubj&)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hj`MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Mubj=)}(h h]h }(hjnMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\Mubj)}(hinth]hint}(hj|MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Mubj=)}(h h]h }(hjMhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj\Mubh)}(horderh]horder}(hjMhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\Mubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjLubeh}(h]h ]h"]h$]h&]jj uh1jhjILhhhj[LhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhjELhhhj[LhMubah}(h]j@Lah ](jjeh"]h$]h&]jj)jhuh1hhj[LhMhjBLhhubj )}(hhh]j9)}(h!Resource-managed __get_free_pagesh]h!Resource-managed __get_free_pages}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjBLhhhj[LhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jMj4jMj5j6j7uh1hhhhj hNhNubjp)}(hXl**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp_mask`` Allocation gfp flags ``unsigned int order`` Allocation size is (1 << order) pages **Description** Managed get_free_pages. Memory allocated with this function is automatically freed on driver detach. **Return** Address of allocated memory on success, 0 on failure.h](j9)}(h**Parameters**h]jz)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]j?)}(hjNh]hstruct device *dev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj)}(hhh]j9)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjMubj)}(h(``gfp_t gfp_mask`` Allocation gfp flags h](j)}(h``gfp_t gfp_mask``h]j?)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj:Nubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj6Nubj)}(hhh]j9)}(hAllocation gfp flagsh]hAllocation gfp flags}(hjUNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjQNhMhjRNubah}(h]h ]h"]h$]h&]uh1jhj6Nubeh}(h]h ]h"]h$]h&]uh1jhjQNhMhjMubj)}(h=``unsigned int order`` Allocation size is (1 << order) pages h](j)}(h``unsigned int order``h]j?)}(hjuNh]hunsigned int order}(hjwNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjsNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjoNubj)}(hhh]j9)}(h%Allocation size is (1 << order) pagesh]h%Allocation size is (1 << order) pages}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjoNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjMubj9)}(h**Description**h]jz)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj9)}(heManaged get_free_pages. Memory allocated with this function is automatically freed on driver detach.gh]heManaged get_free_pages. Memory allocated with this function is automatically freed on driver detach.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj9)}(h **Return**h]jz)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj9)}(h5Address of allocated memory on success, 0 on failure.h]h5Address of allocated memory on success, 0 on failure.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌdevm_free_pages (C function)c.devm_free_pageshNtauh1hhj hhhNhNubh)}(hhh](h)}(h=void devm_free_pages (struct device *dev, unsigned long addr)h]h)}(hhjlPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhPubj)}(hhh]j9)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjhPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjePubj)}(h&``unsigned long addr`` Memory to free h](j)}(h``unsigned long addr``h]j?)}(hjPh]hunsigned long addr}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjPubj)}(hhh]j9)}(hMemory to freeh]hMemory to free}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjePubeh}(h]h ]h"]h$]h&]uh1jhjIPubj9)}(h**Description**h]jz)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjIPubj9)}(hnFree memory allocated with devm_get_free_pages(). Unlike free_pages, there is no need to supply the **order**.h](hdFree memory allocated with devm_get_free_pages(). Unlike free_pages, there is no need to supply the }(hjPhhhNhNubjz)}(h **order**h]horder}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjIPubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ __devm_alloc_percpu (C function)c.__devm_alloc_percpuhNtauh1hhj hhhNhNubh)}(hhh](h)}(hSvoid __percpu * __devm_alloc_percpu (struct device *dev, size_t size, size_t align)h]h)}(hQvoid __percpu *__devm_alloc_percpu(struct device *dev, size_t size, size_t align)h](j)}(hvoidh]hvoid}(hj9QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5QhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubj=)}(h h]h }(hjHQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5QhhhjGQhMubh__percpu}(hj5QhhhNhNubj=)}(h h]h }(hjZQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hj5QhhhjGQhMubj)}(hjh]h*}(hjhQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5QhhhjGQhMubh)}(h__devm_alloc_percpuh]h)}(h__devm_alloc_percpuh]h__devm_alloc_percpu}(hjyQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjuQubah}(h]h ](jjeh"]h$]h&]jj uh1hhj5QhhhjGQhMubj )}(h/(struct device *dev, size_t size, size_t align)h](j&)}(hstruct device *devh](j+)}(hj.h]hstruct}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j*hjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubh)}(hhh]h)}(hdeviceh]hdevice}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjQmodnameN classnameNjcjf)}ji]jl)}j_j{Qsbc.__devm_alloc_percpuasbuh1hhjQubj=)}(h h]h }(hjQhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hdevh]hdev}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubj&)}(h size_t sizeh](h)}(hhh]h)}(hsize_th]hsize_t}(hj RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetj RmodnameN classnameNjcjf)}ji]jQc.__devm_alloc_percpuasbuh1hhjRubj=)}(h h]h }(hj(RhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjRubh)}(hsizeh]hsize}(hj6RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubj&)}(h size_t alignh](h)}(hhh]h)}(hsize_th]hsize_t}(hjRRhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjORubah}(h]h ]h"]h$]h&] refdomainj-reftypej_ reftargetjTRmodnameN classnameNjcjf)}ji]jQc.__devm_alloc_percpuasbuh1hhjKRubj=)}(h h]h }(hjpRhhhNhNubah}(h]h ]jIah"]h$]h&]uh1j<hjKRubh)}(halignh]halign}(hj~RhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKRubeh}(h]h ]h"]h$]h&]noemphjj uh1j%hjQubeh}(h]h ]h"]h$]h&]jj uh1jhj5QhhhjGQhMubeh}(h]h ]h"]h$]h&]jj juh1hjjhj1QhhhjGQhMubah}(h]j,Qah ](jjeh"]h$]h&]jj)jhuh1hhjGQhMhj.Qhhubj )}(hhh]j9)}(hResource-managed alloc_percpuh]hResource-managed alloc_percpu}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhj.QhhhjGQhMubeh}(h]h ](j-functioneh"]h$]h&]j2j-j3jRj4jRj5j6j7uh1hhhhj hNhNubjp)}(hX**Parameters** ``struct device *dev`` Device to allocate per-cpu memory for ``size_t size`` Size of per-cpu memory to allocate ``size_t align`` Alignment of per-cpu memory to allocate **Description** Managed alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach. **Return** Pointer to allocated memory on success, NULL on failure.h](j9)}(h**Parameters**h]jz)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj)}(hhh](j)}(h=``struct device *dev`` Device to allocate per-cpu memory for h](j)}(h``struct device *dev``h]j?)}(hjRh]hstruct device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjRubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj)}(hhh]j9)}(h%Device to allocate per-cpu memory forh]h%Device to allocate per-cpu memory for}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubj)}(h3``size_t size`` Size of per-cpu memory to allocate h](j)}(h``size_t size``h]j?)}(hj"Sh]h size_t size}(hj$ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj Subah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjSubj)}(hhh]j9)}(h"Size of per-cpu memory to allocateh]h"Size of per-cpu memory to allocate}(hj;ShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hj7ShMhj8Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ShMhjRubj)}(h9``size_t align`` Alignment of per-cpu memory to allocate h](j)}(h``size_t align``h]j?)}(hj[Sh]h size_t align}(hj]ShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjYSubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjUSubj)}(hhh]j9)}(h'Alignment of per-cpu memory to allocateh]h'Alignment of per-cpu memory to allocate}(hjtShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjpShMhjqSubah}(h]h ]h"]h$]h&]uh1jhjUSubeh}(h]h ]h"]h$]h&]uh1jhjpShMhjRubeh}(h]h ]h"]h$]h&]uh1jhjRubj9)}(h**Description**h]jz)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj9)}(hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.h]hjManaged alloc_percpu. Per-cpu memory allocated with this function is automatically freed on driver detach.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj9)}(h **Return**h]jz)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubj9)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j8hX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1johj hhhNhNubeh}(h]device-resource-managementah ]h"]device resource managementah$]h&]uh1hhhhhhhhKubeh}(h] driver-basicsah ]h"] driver basicsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjTerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jSjSjYjVj$j$jejejgjdjjj]j]jNjKj7j4jjjj~jjjSjSu nametypes}(jSjYj$jejgjj]jNj7jjjjSuh}(jShjVhhhjjjj"jjjjj$j\jyj~jk jp j j j`jejjjjjjjjjj jQjVjjjjjjjXj]jjj!j!j#j#jej$j$j$j&j&jI(jN(j)j)j+j+j_-jd-j /j/j0j0j2j!2j3j3j 5j5j_9jd9j;j;jd=ji=j>j>j^@jc@jBjBjDjDjFjFjJjJjLjLjOjOj8Tj=TjXj#Xj ZjZj\j\j^j^j `j`jajaj!bj&bjcjcjdjej;ej@ejfjfj)hj.hjijijjjjjRljWljmjmjojojqjqjrjrj(tj-tjujujNwjSwjxxj}xjyjyjzjzj{j{j }j%}jJ~jO~jtjyjjj\jajjjjjjjj jMjRjyj~j#j(jjjܙjjjjjjjjWj\jҢjעjOjTjjj@jEjjjϪjԪjjjFjKj۲jjmjrj#j(jjjjjZj_j:j?jbjgj jjjjjjj!jjjjjjjj!jCjHjjj j%jjjjjjjjjjjjjjjjjjjjjjjjjjj"jjjjjjjJjOjjjj j7j<jK jP j j jjjjj_jdj#j(j@jEj]jjjjjjz j j "j"j#j#j!%j&%j&j&j3)j8)j-+j2+j,j,jr/jw/jT1jY1j63j;3j4j4jU6jZ6j8j8jx;j};jQ=jV=j*?j/?jAjAjBjBjDjDjFjFjfIjkIjqKjvKjBMjGMjnOjsOj`QjeQjSjSjVjVj#Yj(Yj[j[jKj]j ^j^jajajdjdjfjfjgijlijkjkjmjmjojojrjrjtjtjzvjvjwjwjzjzj{j{jh|jm|jIjNjj!jajfjj!jjj/j4jXj]jjjjj͔jҔjj$jjjכjܛjjjjjXj]jjj{jj,j1jSjXjjjjjxj}j*j/jmjrjjjjjjj#j(jĿjɿjjjj jljqjjjjjCjHjjjgjljjj*j/jjjjjjj|jjj#jyj~jjj4jQjnjsjj j jjjjjjjjjjmjrjjjjjjjIjNjjjfjkj#j(jfjkjjjj:jWj\j2j7j j j8 j= jd ji jjjjjBjGjjjjj2j7jjjjj""j'"j`$je$j&j&j)j)jP+jU+j-j-j/j/j@2jE2j4j4j6j6j8j8jp:ju:jA<jF<j>j>j?j?jAjAjCjCjVEj[Ej'Gj,GjHjHjJjJjLjLjYNj^Nj*Pj/PjQjRjSjSjUjUjnWjsWjYjYj[j\jL^jQ^j`j`jbjbj*ej/ejzgjgjijijljljjnjonjpjpjrjrjHujMujwjwjyjyj&|j+|jv~j{~jƀjˀjjjfjkjjjjj#j(jbjgjEjJj(j-j jjjjjj0j5jQjVjrjwjjjѪj֪jjƬj0j5jjjjj}jjqjvjjjjjjjjjjjjjjjjjj#jojtjjj[j`jjjGjLjjj3j8jjjj$jpjujjj\jajjjHjMjjj4j9jjj j%jjjjjjjjjojtjSjXj7j<jj j j j j j j jjjjjojNjSj2j7jjjjjjj/j4jjj"j "j$j$j'j 'jX)j])j+j+jD.jI.j0j0j03j53j5j5j7j7jm:jr:j<j<jY?j^?jAjAj Dj%DjFjFj IjIjKjKjMjMjLPjQPjRjRjUjUj2Xj7XjN[jS[jj^jo^jajajdjdjhjhj[kj`kjnjnj$qj)qjsjsjuj ujwjwjzj zj|j|j jj8j=jpjujjjjjjjƍjˍjjjzjjjjҕjוjjj`jejjjjjPjUjjjjj@jEjjjάjӬjj#jnjsjjójjj^jcjjjjjNjSj jjjjjjjjQjVj"j'jjjjjjjTjYj%j*jjjjjjjijnj:j?j jjjjjjjjojjj jjZj_jjjjj8j=jjjjjjjfjkjjjj jVj[jjjjj4 j9 j j j j jjjRjWjjjjjjjjjyj~j\"ja"j}%j%j(j(j+j+j.j.jO1jT1j?3jD3j/5j45j7j7j :j:j|<j<j>j>jAjAjDjDjGj GjIjIj,Kj1Kj3Mj8Mj OjOjPjPjSjSj?UjDUj}WjWjYjYj\j"\jm^jr^j`j`j cjcj]ejbejgjgjijjj;lj@ljnjnjpjpj+sj0sj{ujujwjwjzj zjk|jp|j~j~jzjjKjPjj!jjjjÇjjj`jej1j6jjjjƐjjjcjhj4j9jj j֙jۙjjjxj}jIjNjjjףjܣj'j,jwj|jǪj̪jj jUjZjjjjjEjJjjjӺjغj#j(jsjxjjjjjQjVjjjjjAjFjjjjjjj=jBj j%jjjjjjjjj jj,j1jMjRjjjjjjj jjzjjjjXj]jKjPj]jbjqjvjjj j j j jjjzjjjjjjIjNjjj5j:jjj!!j&!j#j#j &j&j(j(j*j*jJ-jO-j/j/j62j;2j4j4j"7j'7j9j9j<j<j>j>j@j@jBjBjDjDjFjFjeHjjHjIJjNJj-Lj2LjNjNjOjOjQjQjSjSj|UjUj`WjeWjDYjIYj([j-[j ]j]j^j^j`j`jbjbj ejejgjgjijijkljpljnjnj2qj7qjsjsjvj#vjxjxj {j{j[}j`}jjjGjLjj„j3j8jjjjjpjujjj\jajjƕj&j+jjjjj jj(j-jDjIj`jejjjjj5j:j|jjjjjj޼jj`jejjjdjijjjjjJjOj^jcjrjwjjjjjzjjTjYjjjjjjj:j?jjjjj*j/jzjjjjjjjjojjjjjHjMjjjjj8j=jjjjj(j-jjj j j j jZj_j+j0jjjjjjjojtj.j3jjjjjjjr jw jC"jH"j$j$j%j%j'j'j)j)jD,jI,j.j.j0j0j43j93jr5jw5j7j7j:j:jb<jg<j>j>j@j@j@CjECjEjEjGjGj0Jj5JjnLjsLjNjNjQjQj^SjcSjUjUjWjWj,Zj1Zjk\jp\j^j^jajajpdjudjSgjXgj6jj;jjWmj\mjxpj}pjsjsjvjvj)yj.yj{j{j }j}jxj}jjjVj[jņjʆjjjʌjόjގjjjjj j~j j&j+jbjgjʙjϙjj#jjjȣjͣjߥjjjjdjijjj{jjܮjj\jajjj,j1jQjVjjj j%jjjjjjjjjjjjjjjjj jjjjj jGjLjCjHjj j.j3jjjzjjjjjj$j)j.j3jjjjjjjj j.j3jVj[j~jjjj8j=j jjBjGjyj~jjj@jEjHjMjjjjjjjjj=jBjejjjjj*j/jjjSj j&j+jjjI jN j j j j jFjKjjjFjKjjj/j4j("j-"jH$jM$jh&jm&j(j(j,j",j[/j`/jE2jJ2j4j5j8j8j:j:j=j=j@j@jCjCjEjEjHjIj@LjELjOjOj,Qj1Qu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]j9)}(heUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.h]hgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j8hjTubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKXsourcejuh1j~Thjubatransform_messages] transformerN include_log] decorationNhhub.